私はそのような配列を持っています:
int sizes[5] = {1,2,3,4,5};
上記の配列を使用して、5つの異なる配列が必要です。各配列のサイズをsizes[i]
(0 <= i <5)にしたいからです。どうやってやるの?これについて熟考すればするほど、混乱します。多次元配列を使用する必要がありますか、それとも単純なソリューションを使用する必要がありますか?前もって感謝します。
私はそのような配列を持っています:
int sizes[5] = {1,2,3,4,5};
上記の配列を使用して、5つの異なる配列が必要です。各配列のサイズをsizes[i]
(0 <= i <5)にしたいからです。どうやってやるの?これについて熟考すればするほど、混乱します。多次元配列を使用する必要がありますか、それとも単純なソリューションを使用する必要がありますか?前もって感謝します。
スレッドでSTLを要求します!
std::vector<int> arrays[5];
for (i = 0; i < 5; ++i)
arrays[i].resize(sizes[i]);
あなたの質問を理解したように、長さが[0、5]の範囲(可変長)の配列の配列が必要です。
ですから、たくさんの選択肢があります。そのうちの2つを提供します。
質問にC++タグを付けたので、 STLを参照することをお勧めします。STLには便利なコンテナーがたくさんあり、そのうちの1つstd::vector
は動的配列です(サイズは異なる場合があります)。
便利なCを入力すると、ポインタの配列を使用できます。各ポインタは配列上のポインタになります。
シンプルで、動的メモリ割り当てが必要です。
int sizes = {1, 2, 3, 4, 5};
int **arrays;
int i;
arrays = new int*[5];
for(i = 0; i < 5; i++)
arrays[i] = new int[sizes[i]]
これは最初は簡単なことですが、実際にはSTLライブラリの方がはるかに便利です。このコードでは、メモリは動的に割り当てられますが、解放されません。これにより、メモリリークが発生する可能性があります。STLライブラリから使用std::vector
すると、面倒な作業から解放され、より簡単な方法が提供されます。
@Mikhailは、vector
以下のsの使用に関する優れたデモンストレーションを示しています。
質問に答えるには、はい、最も効率的なケースでは多次元配列が必要です。要素が動的に割り当てられている間の配列の配列(指定した配列の数が一定であることを考慮)。
int *Array[5];
for(int i = 0; i < sizes; i++)
{
Array[i] = new int[sizes[i]];
}
これで、サイズ0からサイズ5までの5つの動的に割り当てられた配列ができました。
次のような動的割り当てを使用する必要があります。
int *arrays[5];
int i = 0;
int sizes[] = {1,2,3,4,5};
for(i = 0; i < 5; i++)
{
arrays[i] = (int *)malloc(sizes[i]);
}