在C ++中,当我想初始化一些长度的数组(例如整数)时我可以写
int* tab;
tab = new int[size];
在其他地方给出尺寸。但是当涉及多维数组时,我该如何以相同的方式做到这一点?我不能在第二行添加另一个维度,因为编译器不喜欢...
我猜这是一个简单的问题。我需要这样,因为我在面向对象编程中编写了一个赋值,而2D数组是一个类的私有部分,需要在构造函数中构造...(以2维作为参数)。
答案 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];