C++中的堆栈:切换"or"条件时出现运行时错误



我在使用C 中的堆栈时经常发现这种怪异,我不确定问题的确切根源是什么。可以通过代码段更好地解释:

class MinStack {
private:
    stack<int> ans;
    stack<int> min_collector;
public:
    void push(int x) {
        ans.push(x);
        if (min_collector.empty() || getMin()>=x) {
            min_collector.push(x);
        }
    }
    void pop() {
        if (ans.top()==getMin()) {
            min_collector.pop();
        }
        ans.pop();
    }
    int top() {
        return ans.top();
    }
    int getMin() {
        return min_collector.top();
    }

};

上面的代码正常工作。但是,在按下(int x)函数中,如果我编辑这样的" if"条件:

(getMin()>=x  || min_collector.empty())

我遇到了一个运行时错误,还有其他人遇到了这个问题吗?为什么"或"条件下的订单很重要?

这些条件是从左到右评估的,一旦第一学期返回true

对于逻辑 &&执行中止,一旦第一学期返回 false

您会遇到运行时错误,因为在空白时尝试访问堆栈的top()元素是非法的 - 没有顶部元素。

最新更新