因此,如果我有一个带有二维数组的类,我想用传递给构造函数的两个参数进行初始化,我该怎么做,我会一直遇到错误,因为它不允许我更新二维数组完全在构造函数中。
-- 根据评论更新:
在我的头文件中我都试过了
int array[][]
和
int **array
然后在构造函数中的 .cpp 文件中我正在尝试做
array = new int[arg1][arg2]
头文件中的数组声明均无效。
最佳答案
in the constructor I'm trying to do array = new array[arg1][arg2]
需要指定数组类型,如
array = new int[arg1][arg2];
请注意 this works in C++11 only - 使用旧标准时,第二个数组大小需要为常量(这可能不是您想要的)。
还有一些其他文章讨论了同一问题:
理想情况下,由于您无论如何都在使用 C++,因此您应该按照另一个答案中的建议使用 std::vector
。
Vectors use a lot of overhead though, don't they? I'm trying to keep my memory use light. –
从 std::vector
开始。一旦您的应用程序从功能角度正常运行,如果您仍然担心内存使用和/或性能,请进行基准测试。如果您将二维数组正确地封装在一个类中,您始终可以更改数组的实际实现,而不会影响使用它的代码。
技术上,如果您想确保有一个包含数组的平坦内存区域,您可以使用一维数组来模拟一个 2-维数组,如以下代码(只是为了让您了解,当然需要一些改进,尤其是缺少复制构造和赋值运算符):
class Array2D {
private:
int *array;
int size1;
public:
Array2D(int arg1, int arg2) {
size1 = arg1;
array = new int[arg1 * arg2];
}
~Array2D() {
delete[] array;
}
int& at(int i1, int i2) {
return array[i1 * size1 + i2];
}
};
int main() {
Array2D array(10, 10);
array.at(2, 2) = 42;
std::cerr << array.at(2, 2);
return 0;
}
关于c++ - 二维数组作为类的实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16978675/