C ++でプログラミングしてからしばらく経ちましたが、理解しようとしている小さな問題があります。
1 次元が動的ではない 2 x 2 の動的配列を作成することは可能ですか?
例えば
配列[2][動的]?
array[dynamic][dynamic] を作成するのはもったいないようで、最初の [0][dynamic] と 2 番目の [1][dynamic] 値のみを使用する必要がある場合。
別のデータ構造を使用する必要がありますか?
ありがとう。
配列とポインターは基本的に同等であるため、ポインターの配列を使用してこれを実現できます。
int* array[2];
array[0] = new int[x];
array[1] = new int[y];
多次元配列と同じようにアクセスできます。
array[0][x-1] = z;
これは C++11 で機能します。
std::array<std::vector<MyClass>,2> arr;
または、ベクトルの c スタイルの配列を使用できます。
std::vector<MyClass> arr[2];
確かに、それは最初の次元で動的でなければなりません。
たとえばこのように
typedef int two_int_array[2];
two_int_array* a = new two_int_array[n];
for (int i = 0; i < n; ++i)
{
a[i][0] = 1;
a[i][1] = 2;
}
もちろん、一般的により良い方法はベクトルを使用することです。配列のベクトルを使用できないため、構造体のベクトルの方が適している場合があります。
struct two_int_struct
{
int value[2];
};
std::vector<two_int_struct> a(n);
for (int i = 0; i < n; ++i)
{
a[i].value[0] = 1;
a[i].value[1] = 2;
}