在 C++ 中使用 Stacks 时,我经常发现这很奇怪,我不确定问题的确切根源是什么。用代码片段更好地解释:(我像往常一样试图获得堆栈的最小值和推/弹出等)
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();
}
};
上面的代码工作正常。但是,在 push(int x) 函数中,如果我像这样编辑“if”条件:
(getMin()>=x || min_collector.empty())
我收到运行时错误,有没有其他人遇到过这个问题?为什么“或”条件下的顺序很重要?
这些条件从左到右进行评估,一旦第一个术语返回,执行就会中止true
。
&&
一旦第一项返回,逻辑执行就会中止false
。
您会收到运行时错误,因为top()
在堆栈为空时尝试访问堆栈元素是非法的 - 没有顶部元素。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句