boost::array

トップページ > コンテナとイテレータ >

abstract

必要なヘッダ
<boost/array.hpp>
出来ること
普通の固定長配列のラッパ
リファレンス
en

sample

サンプルの動作確認バージョン [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

etc

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のコンテナっぽい気分」ということで。

presented by k.inaba (kiki .a.t. kmonos.net) under CC0