初始化多维数组C ++

时间:2014-12-30 10:05:40

标签: c++ multidimensional-array initialization

在C ++中,当我想初始化一些长度的数组(例如整数)时我可以写

int* tab;
tab = new int[size];

在其他地方给出尺寸。但是当涉及多维数组时,我该如何以相同的方式做到这一点?我不能在第二行添加另一个维度,因为编译器不喜欢...

我猜这是一个简单的问题。我需要这样,因为我在面向对象编程中编写了一个赋值,而2D数组是一个类的私有部分,需要在构造函数中构造...(以2维作为参数)。

3 个答案:

答案 0 :(得分:3)

使用std::vector是安全的方法:

std::vector<std::vector<int>> mat(size1, std::vector<int>(size2));

如果你真的想自己使用new

int** mat = new int*[size1];
for (std::size_t i = 0; i != size1; ++i) {
    mat[i] = new int[size2];
}

别忘了清理资源:

for (std::size_t i = 0; i != size1; ++i) {
    delete [] mat[i];
}
delete[] mat;

答案 1 :(得分:2)

如果你能负担std::vector而不是数组,你可以使用语法:

std::vector< std::vector<int> > matrix(rows, std::vector<int>(columns));

for (int i=0; i<rows; i++) {
    for (int j=0; j<columns; j++) {
        matrix[i][j] = i+j;
    }
}

答案 2 :(得分:0)

如果在初始化阵列之前获得高度/宽度参数,可以尝试:

int height = 10;
int width = 10;

//...

int tab[heigth][width];