我的Stack.h有问题,我不确定我错过了什么。我收到了分段错误错误。我知道它与" void pop()"和" T top()"功能。我很确定这是由空堆栈引起的。通过仅编辑这两个函数,我如何确保我的程序能够运行?我的.cpp文件需要在(!s2.empty)检查之外使用s2.pop。
答案 0 :(得分:1)
删除最后一行s2.pop();
。当你到达那里时,堆栈已经是空的,因为堆栈为空是上面循环的退出条件。
答案 1 :(得分:1)
答案是你最后应该删除s2.pop()
。它在那里没有意义。
while (!s2.empty()) {
cout << s2.top();
s2.pop();
} // s2 is always empty by now, another pop() wouldn't make sense.
cout << endl;
s2.pop();
您可以将pop()
功能更改为
void pop() {
if (!empty())
container.pop_back();
}
然后您的pop()
即使在空堆栈上也能正常工作,但您的top()
仍会崩溃。你无法修复top()
那么容易,所以你最终会遇到令人困惑的不同行为,你不应该这样做。或者一些不直观的实现也很糟糕。