トップページ > コンテナとイテレータ >
サンプルの動作確認バージョン [GCC4.4/1.40.0] [VC9/1.40.0]
#include <iostream>
#include <algorithm>
#include <boost/array.hpp>
using namespace std;
int main()
{
boost::array<int, 100> ar; // int ar[100];
for( int i=0; i<ar.size(); ++i )
ar[i] = i * 100;
boost::array<int, 4> ar2 = {{0, 100, 200, 300}};
// 普通の配列似の初期化
if( equal( ar2.begin(), ar2.end(), ar.begin() ) )
cout << "same" << endl;
// STLっぽく
return 0;
}
same
STLのイテレータってポインタ変数と同じに扱えるように作られてるので、 イテレータを取る関数に対しては組み込みの普通の配列であっても、 同じように渡して処理させることが可能です。
では何でこの array<Type,Size>
が嬉しいかというと、
for_each( ar, ar+sizeof(ar)/sizeof(ar[0]), ... )
に類するダサい書き方をしなくてよい辺りとかですね。
ar.begin(), ar.end()
ってやった方が何かおしゃれな感じ。
あと、size()
が使えるのもちょびっと素敵です。
ま、配列の代わりに std::vector<Type>
を使えばその辺りは全部解決するんですが、vector
はサイズ可変なのでパフォーマンスが気になる…という場合にこの
array
を使うと良いかもしれません。
厳密に言うと "reversible containers" や "sequence" としての基準は満たしていないらしいので、 あくまで「STLのコンテナっぽい気分」ということで。