C++在构造函数中设置类成员数组的2d数组大小
问题描述:
我只找到1d数组的解决方案,但无法将它们应用于2d数组。 可能的解决方案包括“矢量”,“模板”和“指向数组的指针”。C++在构造函数中设置类成员数组的2d数组大小
我知道我可以让矢量工作,但我宁愿使用其他2.最好是模板,因为我不想手动摧毁,但指针也工作。 (指针将指向在构造函数中创建的数组)。
该类包含一个称为屏幕的空2D数组。构造函数应该设置其大小。我尝试了太多的东西来将它们全部列在这里,但我会展示我现在拥有的东西。 (我试图最后一件事是指向数组在构造函数中创建的。在这种情况下的屏幕是一个字符指针)在新的表达式
Screen::Screen(const int w, const int h) : screen(new char[h][w]) {} {
width = w;
height = h;
}
数组大小必须是恒定的
我失败实施这些策略之一,并试图使其工作时收到许多种错误。我将如何解决这个问题? (主要是我想知道如何用模板做到这一点,如果不可能,然后指针指向在构造函数中创建的数组)
答
这个问题有点含糊,但它听起来像你想动态地分配给定的数组输入。 编辑我改变了答案以匹配您提供的代码。这给出了高度和宽度的二维字符数组。
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;
}
这创建了一个空的二维字符数组。
说明:c中的所有数组只是指向已声明类型的内存中第一个块的指针。通过让成员变量为双指针,你有一个char指针数组,每个数组指向每个数组中的第一个值。
但是要小心,你需要释放数据变量来避免内存泄漏,通过声明一个析构函数。
Screen::~Screen() {
for (int i = 0; i < rows; ++i) {
delete[] data[i];
}
delete[] data;
}
向量,模板和指向数组的指针如何连接...无论如何,我不明白你的问题。发布一些你试过写的实际代码,我们会看到它有什么问题。 – DeiDei
首先添加一些代码,告诉我们你的尝试。 – vsoftco
编译时是否已知'w','h'值? –