我正在尝试创建一个多维数组,用户将提供其大小。
到目前为止,我有这个:
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];
我相信数组需要常量值,所以我尝试将变量指定为常量,但仍然没有运气。
答案 0 :(得分: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;
静态内存分配在堆栈中,而动态内存则分配在堆中。
答案 1 :(得分:1)
使用静态数组在C ++中无法实现。以分层方式使用std::vector
(即向量矢量)可以轻松实现多维数组(但不一定非常有效)。
E.g。
std::vector<std::vector<double> > array(nrows, std::vector<double>(ncols));
创建nrows
x ncols
矩阵。
答案 2 :(得分: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];