0

ユーザーが指定するサイズの多次元配列を作成しようとしています。

これまでのところ、私はこれを持っています:

int definedgroups; // for number of groups needed

cout << "Enter the Number of Groups you require: " << endl;
cin >> definedgroups;
const int definedgroups = definedgroups;

int User_Groups [definedgroups] [4];

配列には定数値が必要だと思うので、変数を定数として割り当ててみましたが、まだうまくいきません。

4

3 に答える 3

3

C++ では、静的配列、つまり次のように定義された配列です。

foo arrayStatic[bar];

bar定整数である必要があります。つまり、プログラマーはその値を事前に知っておく必要があります。

barが不明な場合は常に、代わりに動的配列を使用できます。それらは次のように定義されています。

foo* arrayDynamic;
arrayDynamic = new foo[bar];

ここでbarは、整数変数である可能性があります。

最終的に動的メモリの割り当てを解除する必要があることを忘れないでください。したがって、この場合、次のarrayDynamicように割り当てを解除できます。

delete [] arrayDynamic; 

2 次元の動的配列も同様に定義されます。

foo** arrayDynamic2D;
arrayDynamic2D = new foo*[bar];
for (int i = 0; i < bar; i++)
   arrayDynamic2D[i] = new foo[baz];

同様の方法で割り当てを解除します。

for (int i = 0; i < bar; i++)
   delete [] arrayDynamic2D[i];
delete [] arrayDynamic2D;

静的メモリはスタックに割り当てられ、動的メモリはヒープに割り当てられます。

于 2012-12-03T23:00:20.703 に答える
1

静的配列を使用してC++でそれを行うことはできません。階層的な方法(つまり、ベクトルのベクトル)を使用std::vectorして、多次元配列を簡単に実装します(ただし、必ずしも非常に効率的である必要はありません)。

例えば

std::vector<std::vector<double> > array(nrows, std::vector<double>(ncols));

nrowsxncols行列を作成します。

于 2012-12-03T22:42:50.330 に答える
0

以下を使用して動的メモリ割り当てが必要ですnew

int **User_Groups = new int*[definedgroups];
//Allocate memory for 2nd dimension
for (int i = 0; i < 4; ++i)
    User_Groups[i] = new int[4];
于 2012-12-03T22:42:56.630 に答える