我如何修复此代码,以便它不会pop_back或back()如果向量/堆栈为空?

时间:2014-06-10 00:28:48

标签: c++ class stack

我的Stack.h有问题,我不确定我错过了什么。我收到了分段错误错误。我知道它与" void pop()"和" T top()"功能。我很确定这是由空堆栈引起的。通过仅编辑这两个函数,我如何确保我的程序能够运行?我的.cpp文件需要在(!s2.empty)检查之外使用s2.pop。

2 个答案:

答案 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()那么容易,所以你最终会遇到令人困惑的不同行为,你不应该这样做。或者一些不直观的实现也很糟糕。