看到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
13 using namespace std;
14 using namespace boost;
15
16 template < size_t N >
17 void func(array < int ,N > ia) {
18 for(int i = 0; i != ia.size(); ++i) {
19 cout << ia[i] << endl;
20 }
21}
22
23 int 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
13 using namespace std;
14 using namespace boost;
15
16 template < size_t N >
17 void func(array < int ,N > ia) {
18 for(int i = 0; i != ia.size(); ++i) {
19 cout << ia[i] << endl;
20 }
21}
22
23 int 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++)