【问题标题】: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&lt;double&gt;

    【讨论】:

      【解决方案2】:

      //GIVES ERROR that grow and gcol must be const

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

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

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

      因此,您不能有一个二维数组,其中两个维度都是在运行时确定的。

      您有两种选择:

      • 使用指向动态数组的指针的动态数组。这就是你所拥有的,注释掉了。动态向量数组也可以。
      • 使用包含连续行的平面一维数组。

      无论哪种情况,我都建议使用一个类来管理内存。 std::vector,也许吧。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-17
          • 2023-04-11
          • 2020-10-11
          • 2015-03-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-04
          相关资源
          最近更新 更多