簡體   English   中英

多維數組的常數

[英]Constant for a multi-dimensional array

我正在嘗試創建一個多維數組,用戶將提供其大小。

到目前為止,我有這個:

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];

我相信數組需要常量值,因此我嘗試將變量分配為常量,但仍然沒有運氣。

在C ++中, 靜態數組(即,定義如下):

foo arrayStatic[bar];

要求bar為常數整數。 換句話說,程序員需要事先知道其值。

每當bar未知時,都可以使用動態數組代替。 它們的定義如下:

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

在這里, bar可以是整數變量。

不要忘記動態內存必須最終釋放。 因此,在這種情況下,我們可以像這樣取消分配arrayDynamic

delete [] arrayDynamic; 

二維動態數組的定義類似:

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;

靜態內存在堆棧中分配,而動態內存在堆中分配。

使用靜態數組在C ++中是不可能做到的。 以分層方式使用std::vector (即向量的向量)來輕松實現多維數組(盡管不一定非常有效)。

例如

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

創建一個nrows x ncols矩陣。

您需要使用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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM