c++ - 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.
我理解代码。为什么解决方案(在一些随机网站上给出)使用指针。如果我们可以使用上述正常声明来做到这一点。它会使代码更快还是什么?
解决方案
本声明
int a[i][j] ; //i =number of rows and j = number of columns
要求变量i
和j
将是编译时常量。可变长度数组不是标准的 C++n 特性,尽管一些编译器可以有自己的语言扩展,包括这个特性。
存在的第二个问题是如果数组的大小太大,那么编译器可能无法创建具有自动存储持续时间的数组。
因此,如果i
并且j
不是编译时常量或太大,那么您必须自己动态分配内存,或者您可以使用标准容器std::vector
。
推荐阅读
- python - 如何通过运行我的脚本离线保存
- scala - 在 Scala 中使用 Shapeless 从案例类创建“丰富”类型
- android - 使用 ImageSpan 在 TextView 中添加多个微笑
- javascript - 未捕获的 FoamTree:元素的维度为零:522 x 0
- django - Django AttributeError 和查询不存在错误
- javascript - 单击一个按钮以触发对另一个按钮的延迟单击
- javascript - 如何仅输入数字验证
- javascript - 反应状态更新后地图功能将不起作用
- javascript - 单击提交按钮时的 HTML 表单验证
- javascript - Rails 5 - Stripe JS 提交后不刷新