声明并初始化未知大小的2d数组

时间:2015-10-16 10:10:40

标签: c++ arrays matrix const

我从用户

获取行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];*/

}

3 个答案:

答案 0 :(得分:1)

您始终可以使用y * gcol + x在一维数组中进行索引,以使其有效地用作二维数组。有了它,你可以使用动态内存,例如使用std::vector<double>

答案 1 :(得分:1)

  

// GIVES ERROR,增长和gcol必须是const

不,它没有。除非你的编译器坏。再次阅读错误。

它给出了gcol必须是常量表达式的错误。

您不能拥有动态数组的动态数组。它在c ++中根本不可能。您只能拥有静态大小的动态数组,这在编译时是已知的。

因此,您不能拥有在运行时确定两个维度的2D数组。

您有两种选择:

  • 使用动态数组指针的动态数组。评论说,这就是你所拥有的。动态矢量数组也有效。
  • 使用包含连续行的平面一维数组。

在任何一种情况下,我建议使用一个类来管理内存。或许std::vector

答案 2 :(得分:0)

数组大小是类型的一部分,需要在编译时知道。你在运行时得到它。改为使用向量。