C++中初始化多维数组

3
在C++中,当我想要初始化一个某个长度的数组(例如整数数组),我可以直接编写以下代码:
int* tab;
tab = new int[size];

当大小在其他地方给定时,我该如何以同样的方式处理多维数组?我不能只是在第二行中添加另一个维度,因为编译器不喜欢这样做...

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


1
请查看此链接:http://www.learncpp.com/cpp-tutorial/65-multidimensional-arrays/ - Lucian
3
请使用 std::vector - Griwes
1
我听说过向量,但我想知道是否有一种类似于一维数组的方法可以实现... - Jules
1
"我听说过向量。现在是时候真正学习C++了。" - n. m.
3个回答

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;

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;
    }
}

0
如果您在数组初始化之前获取高度/宽度参数,则可以尝试以下操作:
int height = 10;
int width = 10;

//...

int tab[heigth][width];

1
你不能将运行时的值作为自动数组的维度。 - Öö Tiib
需要非标准扩展:VLA。 - Jarod42

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接