多维数组的常量
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];
相关文章:
- C++常量数组的编译时间较长
- 从另一个静态常量数组初始化静态常量数组(只需少量计算)
- 使用双指针传递 2D 常量数组
- 检查输入 std::array 指针数据是否等于某个常量数组
- 如何在可执行文件中存储常量数组?
- 常量数组如何在每个元素中只能包含字符,而 char* 数组能够指向每个元素中的字符串?
- LLVM 无法将数组类型强制转换为常量数组
- 如何在C++中的单行中返回常量数组中的值
- C++ 具有常量数组和initializer_list的重载构造函数
- 在可变参数构造函数中初始化常量数组
- 非常量数组
- C/C++ 中的常量数组和静态常量数组有什么区别
- C++全局常量数组:是否保证合并(优化)到一个副本中
- 在常量数组上使用指针遍历
- 具有函数指针常量数组的 C++ 模板化静态类
- 字符常量数组为空,即使已为其赋值 [C++]
- 指向常量数组的指针
- 函数指针的常量数组令人困惑
- 在 c++ 中初始化静态常量数组
- 常量数组类成员初始化