2次元目以後の長さが決まっているならば、
int len = 10;
int (*tes)[4] = new int [len][4];
のように一発で確保できるのだが、そうでなければ1次元配列を確保して、自分でマッピングするより無さそう。新しい規格だと、この辺も改善されていたような…ないような…。不勉強で、よくわからない(そんな時間もない)。
で、boost::multi_array で試してみたら、これで十分じゃんという結論に…。
#include <iostream>
#include <boost/multi_array.hpp>
void multi_array_test( int x, int y ) {
boost::multi_array<int,2> ma( boost::extents[x][y] );
for( int i = 0; i < x; ++i ) {
for( int j = 0; j < y; ++j ) {
ma[i][j] = i + j;
}
}
for( int i = 0; i < x; ++i ) {
for( int j = 0; j < y; ++j ) {
std::cout << ma[i][j] << ",";
}
std::cout << std::endl;
}
}
int main() {
int x = 10;
int (*tes)[4] = new int [x][4];
for( int i = 0; i < x; ++i ) {
for( int j = 0; j < 4; ++j ) {
tes[i][j] = i + j;
}
}
for( int i = 0; i < x; ++i ) {
for( int j = 0; j < 4; ++j ) {
std::cout << tes[i][j] << ",";
}
std::cout << std::endl;
}
delete [] tes;
std::cout << "---------------" << std::endl;
multi_array_test( 3, 4 );
std::cout << "---------------" << std::endl;
multi_array_test( 4, 6 );
return 0;
}
追記:
しかし、algorithm が使えない… orz
std::random_shuffle( &ma[i][0], &ma[i][y] );
とやると、Assertion failed: size_type(idx - index_base[0]) < extents[0]
ちょっと~~~~~~~
追記(2009/03/14): boost_1_38_0 時点では、multi_array のパフォーマンスは良いとは言えない
0 件のコメント:
コメントを投稿