1

私はそのような配列を持っています:

int sizes[5] = {1,2,3,4,5};

上記の配列を使用して、5つの異なる配列が必要です。各配列のサイズをsizes[i] (0 <= i <5)にしたいからです。どうやってやるの?これについて熟考すればするほど、混乱します。多次元配列を使用する必要がありますか、それとも単純なソリューションを使用する必要がありますか?前もって感謝します。

4

5 に答える 5

5

スレッドでSTLを要求します!

std::vector<int> arrays[5];
for (i = 0; i < 5; ++i)
    arrays[i].resize(sizes[i]);
于 2012-12-05T12:43:55.193 に答える
3

あなたの質問を理解したように、長さが[0、5]の範囲(可変長)の配列の配列が必要です。

ですから、たくさんの選択肢があります。そのうちの2つを提供します。

  1. 質問にC++タグを付けたので、 STLを参照することをお勧めします。STLには便利なコンテナーがたくさんあり、そのうちの1つstd::vector動的配列です(サイズは異なる場合があります)。

  2. 便利なCを入力すると、ポインタの配列を使用できます。各ポインタは配列上のポインタになります。

于 2012-12-05T12:45:11.867 に答える
1

シンプルで、動的メモリ割り当てが必要です。

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の使用に関する優れたデモンストレーションを示しています。

于 2012-12-05T12:41:24.253 に答える
1

質問に答えるには、はい、最も効率的なケースでは多次元配列が必要です。要素が動的に割り当てられている間の配列の配列(指定した配列の数が一定であることを考慮)。

int *Array[5];
for(int i = 0; i < sizes; i++)
{
    Array[i] = new int[sizes[i]];
}

これで、サイズ0からサイズ5までの5つの動的に割り当てられた配列ができました。

于 2012-12-05T12:41:40.913 に答える
1

次のような動的割り当てを使用する必要があります。

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]);
}
于 2012-12-05T12:43:22.100 に答える