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;
}
std::random_shuffle( &ma[i][0], &ma[i][y-1] + 1 );
}
for( int i = 0; i < x; ++i ) {
for( int j = 0; j < y; ++j ) {
std::cout << ma[i][j] << ",";
}
std::cout << std::endl;
}
}
&ma[i][y-1] は、配列の末端のアドレスにあたるわけだが、これに +1 をしてやれば、&ma[i][y] に等しいアドレス、すなわち end() に相当するアドレスが得られる。
+1 に違和感を持つ人もいるかもしれないので補足すると、型が int のポインタなので、+1 する事で、
追記: iterator 使えるじゃんかよ… orz
追記(2009/03/14): boost_1_38_0 時点での multi_array は、1次元配列から自前で計算した方が速いようだ。
0 件のコメント:
コメントを投稿