我只找到了1d阵列的解决方案,但无法将它们应用于2d阵列。 可能的解决方案包括"向量","模板"和"指向数组的指针"。
我知道我可以让矢量工作,但我宁愿使用其他两个。最好是模板,因为我不想手动破坏,但指针也可以。 (指针将指向在构造函数中创建的数组。)
该类包含一个名为screen的空2d数组。构造函数应该设置它的大小。我尝试了很多东西让我在这里列出所有内容,但我会展示我现在拥有的东西。 (我试过的最后一件事是指向在构造函数中创建的数组的指针。在这种情况下,屏幕是一个char指针)
Screen::Screen(const int w, const int h) : screen(new char[h][w]) {} {
width = w;
height = h;
}
new-expression中的数组大小必须是常量
我尝试使其工作时未能实现其中任何一种策略并收到多种错误。我该如何解决这个问题? (主要是我想知道如何使用模板执行此操作。如果不可能,那么使用指向构造函数中创建的数组的指针)
答案 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;
}