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; 

类似地定义二维动态数组:

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 回答