c++ - C++二维动态数组

标签 c++ arrays dynamic

我正在使用 C++,我想使用二维动态数组。我试过这个:

#include<iostream.h>
using namespace std;
void main(){
int const w=2;
int size;
cout<<"enter number of vertex:\n";
cin>>size;
int a[size][w];
for(int i=0; i<size; i++)
   for(int j=0; j<w; j++){
      cin>>a[i][j];
  }

}

但没有措辞。 我试过这个:

int *a = new a[size][w];

代替

int a[size][w];

但没有成功!

你能帮帮我吗。

非常感谢。

最佳答案

这里正确的方法是将一些标准容器封装起来,这些容器将为您管理内存,并将其封装在一个提供良好接口(interface)的类中。常见的方法是重载 operator(),采用两个参数来确定矩阵中的行和列。

除此之外,您尝试手动创建的是一个由大小为 2 的动态大小数组组成的数组。借助 typedef,您可以用一种简单易懂的方式编写:

const int w = 2;
typedef int array2int[w];
int size = some_dynamic_value();
array2int *p = new array2int[size];

没有 typedef,语法有点复杂,但可行:

int (*p)[w] = new int [size][w];

在这两种情况下,您都可以使用相同的简单语句释放内存:

delete [] p;

与执行双指针的方法 (int **) 的不同之处在于数组的内存布局实际上是二维数组的布局,而不是跳表到多个单独分配的一维数组,提供更好的数据局部性。分配数量更少:一次分配与 size + 1 分配相比,减少了内存碎片。它还减少了内存泄漏的可能性(分配单个指针,要么泄漏所有内容,要么根本不泄漏)。

关于c++ - C++二维动态数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21050665/

相关文章:

c++ - 为什么 gcc 警告使用 std::tuple 和虚拟继承调用非平凡的移动赋值运算符?

php - 使用 PHP 按姓氏对 CSV 文件进行排序

javascript - 如何使用Bloodhound建议引擎? (多属性对象在本地传递)

python - 制定了动态规划算法的递归后,我们如何填写表格?

python - 为什么从不同的文件位置调用时会得到不同的结果?

c++ - 如何实例化一个没有默认构造函数的类型的 boost::fusion::vector 成员变量?

c++ - 找不到时生成默认值

c++ - C++ 中用于字节 block 随机读/写的基本文件 I/O

将文件读取到 byte[] 数组时出现 java.lang.OutOfMemoryError

java - 使用动态列表使用 jpa 2.0 构建条件查询