在C++中,当我想要初始化一个某个长度的数组(例如整数数组),我可以直接编写以下代码:
int* tab;
tab = new int[size];
当大小在其他地方给定时,我该如何以同样的方式处理多维数组?我不能只是在第二行中添加另一个维度,因为编译器不喜欢这样做...
我猜这是个简单的问题。我需要这样做,因为我在写一个面向对象编程的作业,而2D数组是类的私有部分,需要在构造函数中被构造(带有2个维度的参数)。
int* tab;
tab = new int[size];
当大小在其他地方给定时,我该如何以同样的方式处理多维数组?我不能只是在第二行中添加另一个维度,因为编译器不喜欢这样做...
我猜这是个简单的问题。我需要这样做,因为我在写一个面向对象编程的作业,而2D数组是类的私有部分,需要在构造函数中被构造(带有2个维度的参数)。
使用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;
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;
}
}
int height = 10;
int width = 10;
//...
int tab[heigth][width];
std::vector
。 - Griwes