首页 > 解决方案 > int **arr =new int [ n] 之间的不同;和int a[i][j]?

问题描述

我正在解决子矩阵总和的问题,我将我的二维数组声明为

   int a[i][j] ; //i =number of rows and j = number of columns

我的代码正确执行。但是当我看到解决方案时,我看到了以下几行:

 int **arr = new int * [n] ;
 for (int i = 0 ; i < n  ; i++)
    {
     arr[i]=new int [m];
    } 
 // n -> number of rows and  m -> number of columns.

我理解代码。为什么解决方案(在一些随机网站上给出)使用指针。如果我们可以使用上述正常声明来做到这一点。它会使代码更快还是什么?

标签: c++arraysmatrix

解决方案


本声明

int a[i][j] ; //i =number of rows and j = number of columns

要求变量ij将是编译时常量。可变长度数组不是标准的 C++n 特性,尽管一些编译器可以有自己的语言扩展,包括这个特性。

存在的第二个问题是如果数组的大小太大,那么编译器可能无法创建具有自动存储持续时间的数组。

因此,如果i并且j不是编译时常量或太大,那么您必须自己动态分配内存,或者您可以使用标准容器std::vector


推荐阅读