c++ - 二维数组作为类的实例变量

标签 c++ arrays multidimensional-array

因此,如果我有一个带有二维数组的类,我想用传递给构造函数的两个参数进行初始化,我该怎么做,我会一直遇到错误,因为它不允许我更新二维数组完全在构造函数中。

-- 根据评论更新:

在我的头文件中我都试过了

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/

相关文章:

c++ - 为什么这个程序输出相同的结果 4 次?

c++ - 如何将字符串解析为 std::map 并验证其格式?

c++ - 使已经绘制的内容透明?

C++ boost::bind/lambda 和 operator bool()

r - 将矩阵添加到数组

c - 从 strncpy() 函数获取奇怪的字符

php - 为mysql准备多维数组

javascript - 给定整数范围之间的随机数组,包含该范围内每个整数的至少一个实例

java - 获取二维数组中的特定用户输入

C++ 标记 3D 对象数组中的连续部分