看到C#的array自帶GetLength()很羨慕嗎?boost::array也自帶size()喔!!


由於boost::array自帶size(),所以當傳進function時,可以不需將array size當參數傳進function。

1/**//*
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

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。