二次元配列を要素とするコンテナ(実質三次元配列)を作ることは可能なのでしょうか?
や
としてもうまくいきません。
とやるほかないのでしょうか?
二次元配列を要素とするコンテナについて
Re: 二次元配列を要素とするコンテナについて
きちんと実装すればうまく行きそうだと思います。
ただ、よくわかりませんが「スマートポインタ」を使った方がいいのでしょうか?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
-
かずま
Re: 二次元配列を要素とするコンテナについて
[2][3] ならいいけれど、[100][100]のようにサイズが大きいと
コピーに時間がかかります。
コピーに時間がかかります。
#include <iostream>
#include <vector>
using namespace std;
struct A2 {
int v[3][4];
int* operator[](size_t n) { return v[n]; }
};
int main()
{
vector<A2> a(2);
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 4; k++) {
cout << ' ' << &a[i][j][k];
a[i][j][k] = (i+1)*100 + (j+1)*10 + (k+1);
}
cout << endl;
}
cout << endl;
}
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
for (int k = 0; k < 4; k++) {
cout << ' ' << a[i][j][k];
}
cout << endl;
}
cout << endl;
}
}
Re: 二次元配列を要素とするコンテナについて
たしかにコピーされるかという問題はありますね。
この「きちんと実装すればうまく行きそう」というのは、「コンパイルエラーにならない」という意味です。みけCAT さんが書きました:きちんと実装すればうまく行きそうだと思います。
C++11のstd::arrayを使ったり 二次元配列もどきクラスを自作したり などの方法があります。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)