トップページ > コンテナとイテレータ >
#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;
}
ご覧の通り、boost::array
の多次元版とでも言うべき物です。vector< vector<int> >
と作るのと違って多次元配列全体をメモリ上の連続領域に確保できるのが、
大きな特徴。領域上の配置順序はC風やFortran風から選べるようになっています。