(原創) 如何使用boost::array? (C/C++) (template) (boost)
看到C#的array自帶GetLength()很羨慕嗎?boost::array也自帶size()喔!!
由於boost::array自帶size(),所以當傳進function時,可以不需將array size當參數傳進function。
1/*
2(C) OOMusou 2007 http://oomusou.cnblogs.com
3
4Filename : boostArraySize.cpp
5Compiler : Visual C++ 8.0 / ISO C++ (boost)
6Description : Demo how to use boost array pass to function
7Release : 02/25/2007 1.0
8*/
9#include <iostream>
10#include <boost/array.hpp>
11#include "conio.h"
12
13using namespace std;
14using namespace boost;
15
16template<size_t N>
17void func(array<int,N> ia) {
18 for(int i = 0; i != ia.size(); ++i) {
19 cout << ia[i] << endl;
20 }
21}
22
23int main() {
24 array<int, 3> ia = {0 , 1, 2};
25 func(ia);
26
27 getch();
28}
2(C) OOMusou 2007 http://oomusou.cnblogs.com
3
4Filename : boostArraySize.cpp
5Compiler : Visual C++ 8.0 / ISO C++ (boost)
6Description : Demo how to use boost array pass to function
7Release : 02/25/2007 1.0
8*/
9#include <iostream>
10#include <boost/array.hpp>
11#include "conio.h"
12
13using namespace std;
14using namespace boost;
15
16template<size_t N>
17void func(array<int,N> ia) {
18 for(int i = 0; i != ia.size(); ++i) {
19 cout << ia[i] << endl;
20 }
21}
22
23int main() {
24 array<int, 3> ia = {0 , 1, 2};
25 func(ia);
26
27 getch();
28}
執行結果
0
1
2
1
2
18行
for(int i = 0; i != ia.size(); ++i) {
我們看到ia自帶size()
25行
func(ia);
也沒有傳array size進去。
Conclusion
C/C++傳統須另外將array size當參數傳進function的缺點,現在有兩種方式解決,一種是使用function template,請參閱(原創) 如何使用function template傳遞array?(C/C++) (template),一種就是本文所使用的boost:array。
See Also
(原創) array傳進function該怎麼寫才好? (C/C++)
(原創) 如何使用function template傳遞array? (C/C++)