我正在尝试使用数组实现堆栈。这就是我的 头文件。我计划在构造函数中将值赋给maxsize。但是,我一直在收到错误。我该如何解决这个问题?
class stack {
private:
const int maxsize;
int arrays[maxsize];
int top;
public:
stack();
void additem(int);
void print();
};
答案 0 :(得分:1)
一个好的解决方案是:
class stack
{
std::vector<int> arrays;
int top;
public:
stack(int maxsize) : arrays(maxsize), top(0) {}
};
这样,您就没有任何内存管理错误的可能性;你的类在复制,移动,交换等时表现得很好,你的代码非常简单。
具有最小内存占用量的替代方案是:
class stack
{
std::unique_ptr<int[]> arrays;
int maxsize;
int top;
public:
stack(int maxsize) : arrays(new int[maxsize]), maxsize(maxsize), top(0) {}
};
此版本是可移动的,但在复制时会产生编译错误(与使用原始指针的其他一些建议相反,后者将成功编译,然后在运行时导致内存损坏)。要使此类可复制,您需要编写自己的复制构造函数和复制赋值运算符。
答案 1 :(得分:0)
C ++不允许使用可变长度数组。您可以使用指针和动态分配来代替数组。
要初始化import sys
def get_lined_input():
buffer = []
for line in sys.stdin:
buffer.append(line)
return ' '.join(buffer)
成员,您必须在构造函数的初始化列表中执行此操作。
const
请参阅How to initialize a const field in constructor?
然后您还需要一个执行class stack {
private:
const int maxsize;
int *arrays;
int top;
public:
stack(int max = 10) : maxsize(max) {
arrays = new int[max];
top = 0;
}
void additem(int);
void print();
};
的析构函数。
但是,您可能更容易使用delete[] arrays;
而不是使用C风格的数组。这不需要首先指定最大长度,它将根据需要进行扩展。
当然,您可以跳过整个exersize并使用std::vector<int>
。
答案 2 :(得分:0)
如果您希望maxsize
始终为10,则可以执行以下操作:
class stack {
private:
static const int maxsize = 10;
int arrays[maxsize];
...
请注意,我已将maxsize
设为静态。它对于stack
的所有实例都是相同的,并且在编译时定义。因此,您可以将其用作数组大小。
如果您希望maxsize
变量,那么您需要使用动态分配:
class stack {
private:
const int maxsize;
int* arrays;
...
public:
stack(int maxsize) : maxsize(maxsize), arrays(0) {
arrays = new int[maxsize];
}
~stack() { delete[] arrays; }
...
请注意,您必须删除动态分配的内存。通常的做法是析构函数。如果你想走这条路,你也可以使用std::vector<int>
并完全摆脱maxsize
。这使您无需进行任何手动内存管理。