boost::multi_array

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

abstract

必要なヘッダ
<boost/multi_array.hpp>
出来ること
多次元配列
リファレンス
en / jp

sample

#include <iostream>
#include <boost/multi_array.hpp>
using namespace std;

int main()
{
	// intの3次元配列~
	typedef boost::multi_array<int, 3> MyArray;

	// サイズは2×3×4で
	MyArray A( boost::extents[2][3][4] );

	// こんな感じに使えます。
	for( int i=0; i!=2; ++i )
		for( int j=0; j!=3; ++j )
			for( int k=0; k!=3; ++k )
				A[i][j][k] = i + j + k;



	// やや複雑な例。
	// 3次元配列の一部分 A[0-1][1][1-2] を view[0-1][0-1] と
	// 2次元で見られるようにviewを作ります。
	typedef MyArray::index_range range;
	MyArray::index_gen           indices;
	MyArray::array_view<2>::type view =
		A[ indices[range(0,2)][1][range(1,3)] ];

	for( MyArray::index i=0; i!=2; ++i )
		for( MyArray::index j=0; j!=2; ++j )
			if( view[i][j] != A[i][1][j+1] )
				cout << "error" << endl;

	return 0;
}

etc

ご覧の通り、boost::array の多次元版とでも言うべき物です。vector< vector<int> > と作るのと違って多次元配列全体をメモリ上の連続領域に確保できるのが、 大きな特徴。領域上の配置順序はC風やFortran風から選べるようになっています。

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