具有动态行数和固定列数的2D数组的初始化。 C ++

时间:2010-11-23 14:10:38

标签: c++ multidimensional-array fixed dynamic-arrays

我在使用C ++创建2D动态数组时遇到问题。我希望它具有动态数字(例如numR)的“行”和固定的(例如2)数量的“列”。

我尝试这样做:

const numC = 2;
int numR;
numR = 10;
double *myArray[numC];
myArray = new double[numR];

不幸的是,它不起作用。是否有可能以这种方式做到这一点?

当然我可以使用double **myArray并初始化它,好像两个维度都是动态的(将numC用作循环中的限制器)但我想尽可能避免使用它。

提前致谢。

4 个答案:

答案 0 :(得分:6)

  

是否可以这样做?

是:

double (*myArray)[numC] = new double[numR][numC];
// ...
delete[] myArray;

这可能看起来有点不寻常,但5.3.4§5明确指出:

  

new int[i][10]的类型为int (*)[10]

请注意,许多程序员不熟悉C声明符语法,也不会理解此代码。此外,手动动态分配也不例外。对于这些方法,数组向量更好:

#include <vector>
#include <array>

std::vector<std::array<double, numC> > vec(numR);
// ...
// no manual cleanup necessary

std::array替换为std::tr1::arrayboost::array,具体取决于您的编译器。

答案 1 :(得分:2)

为什么不使用std::vector,并利用其constructor

std::vector<std::vector<int> > my2Darray(2, std::vector<int>(10));
my2Darray[0][0] = 2;

答案 2 :(得分:1)

需要有一个循环,因为你需要为每一列创建一个数组

我认为你所追求的是:

double *myArray[numC];
for (int i = 0; i < numC; i++) {
    myArray[i] = new double[numR];
}

// some code...

// Cleanup:
for (int i = 0; i < numC; i++) {
    delete [] myArray[i];
}

这声明了一个带有double元素的指针数组(到numC),然后为{{1}中的每一列创建一个double个数组,其中包含numR个元素}}。不要忘记在完成内存后释放内存,否则会导致内存泄漏。

答案 3 :(得分:-1)

您的索引应该是行,然后是列。

double** myArray = new double*[numR];
for( unsigned int i = 0; i < numR; i++ ) {
    myArray[i] = new double[numC];
}

访问第2行第5列:

myArray[2][5];