あなたのコードは、あなたが思っていることをしません。
ArrayList[][] gridList = new ArrayList[300][150];
array
この最初の行はof array
of を割り当てArrayList
ます。
ArrayList al = this.gridList[a][b];
この 2 行目は、gridListのat オフセットArrayList
で at オフセットb
を取得します。コードはどちらの配列も初期化しないことに注意してください。array
a
array
C++ での同等の型は次のようになります。
#include <vector>
#include <array>
std::array< std::array< std::vector<T>, 150>, 300> gridList;
ここT
で、ベクトルに格納されている要素の型です。ジェネリックより前の Java では、要素の型を指定せずに ArrayList を定義することしかできなかったことに注意してください。C++ では、このパラメーターは必須です。上記の変数定義は、現在のスコープに対してインスタンス化します。new
動的な値に対して (Java のように) ステートメントを使用する必要があり、おそらくそれをスマート ポインターでラップします。
[]
グリッドの要素にアクセスするには、次の演算子を使用できます。
vector v = gridList[a][b];
vector
これにより、グリッド内の < a,b > の位置にあるコンテンツの完全なコピーが にトリガーされることに注意してくださいv
。示唆されているように、より効率的な方法は次のように書くことです。
auto const &al = gridList[a][b];
繰り返しになりますが、Java で使用されるメモリ モデルは非常に動的であるため、コードの動作を Java バージョンに近づけたい場合は、おそらく次のようになります。
#include<memory>
typedef std::vector<int> i_vector;
typedef std::shared_ptr<i_vector> i_vector_ptr;
typedef std::array< std::array< i_vector_ptr>, 150>, 300> vector_grid;
typedef std::shared_ptr<vector_grid> vector_grid_ptr;
vector_grid_ptr gridList;
i_vector_ptr al = (*gridList)[a][b];
タイプT
はint
で、グリッド タイプの各コンポーネントは明確に定義されています。i_vector
グリッドと各要素 (つまり、ここ)を割り当てる必要があります。