【问题标题】:declare and initialize 2d array with unknown size声明并初始化未知大小的二维数组
【发布时间】:2015-10-16 10:10:40
【问题描述】:
我从用户那里获取行 n 和列 m 的大小
我想制作一个大小为 nxm 的二维数组(矩阵),对其进行初始化并对其进行一些处理
int main()
{
int m,n;
cin>>m>>n;
const int grow=m;
const int gcol=n;
auto G = new double[grow][gcol](); //GIVES ERROR that grow and gcol must be const
/*int** G = new int*[n];
for (int i = 0; i < n; ++i)
G[i] = new int[n];*/
}
【问题讨论】:
标签:
c++
arrays
matrix
constants
【解决方案1】:
您始终可以使用y * gcol + x 在一维数组中进行索引,以使其有效地作为二维数组工作。有了它,您可以使用动态内存,例如带有std::vector<double>。
【解决方案2】:
//GIVES ERROR that grow and gcol must be const
不,它没有。除非你的编译器不好。再次阅读错误。
它给出了gcol必须是一个常量表达式的错误。
您不能拥有动态数组的动态数组。这在 C++ 中根本不可能。您只能拥有在编译时已知的具有静态大小的动态数组。
因此,您不能有一个二维数组,其中两个维度都是在运行时确定的。
您有两种选择:
- 使用指向动态数组的指针的动态数组。这就是你所拥有的,注释掉了。动态向量数组也可以。
- 使用包含连续行的平面一维数组。
无论哪种情况,我都建议使用一个类来管理内存。 std::vector,也许吧。
【解决方案3】:
数组大小是类型的一部分,需要在编译时知道。你在运行时得到它。请改用向量。