c ++二维动态数组

时间:2014-01-10 17:30:09

标签: 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];

但没有奏效!

你能帮助我吗?

非常感谢。

4 个答案:

答案 0 :(得分:4)

这里正确的方法是在一个提供良好界面的类中封装一些标准容器,它们将为您管理内存。常见的方法是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分配,减少了内存碎片。它还减少了内存泄漏的可能性(分配了一个指针,要么泄漏所有内容,要么根本不泄漏)。

答案 1 :(得分:2)

对于动态大小的数组,您必须动态分配它。而不是

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

使用

int** a = new int*[size];
for(int i = 0; i < size; i++)
    a[i] = new int[w];

答案 2 :(得分:1)

你不能用c ++做到这一点,请阅读dynamic memory allocation

下面的代码应该可以使用

int* twoDimentionalArray = new [size*w]

答案 3 :(得分:1)

OP表示他想要创建一个二维数组,其中一个维度已经知道并且是常量而另一个维度是动态的。不确定我是否正确但是这里是:

int main() {
    const int w = 2;

    int size = 10;

    int* arr[w];

    for (int i = 0; i < w; ++i)
        arr[i] = new int[size];


    //do whatever with arr..
    //std::cout<<arr[0][0];

    for (int i = 0; i < w; ++i)
        for (int j = 0; j < size; ++j)
            std::cout<<arr[i][j];


    for (int i = 0; i < w; ++i)
        delete[] arr[i];

    return 0;
}