C ++在构造函数中设置类成员数组的2d数组大小

时间:2017-03-08 00:00:03

标签: c++ arrays

我只找到了1d阵列的解决方案,但无法将它们应用于2d阵列。 可能的解决方案包括"向量","模板"和"指向数组的指针"。

我知道我可以让矢量工作,但我宁愿使用其他两个。最好是模板,因为我不想手动破坏,但指针也可以。 (指针将指向在构造函数中创建的数组。)

该类包含一个名为screen的空2d数组。构造函数应该设置它的大小。我尝试了很多东西让我在这里列出所有内容,但我会展示我现在拥有的东西。 (我试过的最后一件事是指向在构造函数中创建的数组的指针。在这种情况下,屏幕是一个char指针)

Screen::Screen(const int w, const int h) : screen(new char[h][w]) {} {
    width = w;
    height = h;
}
  

new-expression中的数组大小必须是常量

我尝试使其工作时未能实现其中任何一种策略并收到多种错误。我该如何解决这个问题? (主要是我想知道如何使用模板执行此操作。如果不可能,那么使用指向构造函数中创建的数组的指针)

1 个答案:

答案 0 :(得分:1)

这个问题有点含糊不清,但听起来你想在给定输入的情况下动态分配一个数组。 修改我更改了答案以匹配您提供的代码。在给定高度和宽度的情况下,这将创建一个2d的字符数组。

class Screen {
    private:
        char **data;
        int rows;
        int columns;

    public:
        Screen(int num_rows, int num_cols); 
}; 

Screen::Screen(int num_rows, int num_cols) {
    data = new char * [num_rows];
    for (int i = 0; i < num_rows; ++i) {
        data[i] = new char[num_cols];
    }
    rows = num_rows;
    columns = num_cols;
}

这会创建一个空的2D数组字符。

说明:c中的所有数组都只是指向已声明类型的内存中第一个块的指针。通过将成员变量作为双指针,您将拥有一个char指针数组,每个指针指向其各自数组中的第一个值。

但要小心,你需要通过声明析构函数来释放数据变量以避免内存泄漏。

Screen::~Screen() {
    for (int i = 0; i < rows; ++i) {
        delete[] data[i];
    }
    delete[] data;
}