我正在使用 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/