我如何修复这段代码,使它不会pop_back或back()如果向量/堆栈是空的

How do i fix this code so that it wont pop_back or back() if the vector/stack is empty?

本文关键字:back 如果 向量 堆栈 pop 段代码 何修复 代码      更新时间:2023-10-16

我的Stack.h有问题,我不确定我错过了什么。我收到一个分割错误错误。我知道它与"void pop()"answers"T top()"函数有关。我很确定这是由空堆栈引起的。通过只编辑这两个函数,我如何确保我的程序将运行?我的.cpp文件需要有s2。弹出(!s2.empty)复选框

答案是,您应该在最后真正删除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(),这样你就会得到不同的行为,这是令人困惑的,你不应该有。或者一些不直观的实现也很糟糕。

删除最后一行s2.pop();。当您到达那里时,堆栈已经是空的,因为堆栈为空是上面循环的退出条件。

相关文章: