C++でStacksを使用しているときに私はよく気付いていますが、問題の根本的な根拠は不明です。それは、より良いコードのスニペットで説明することになります(私はいつものようになどポップ/スタックの最小値を取得しようとプッシュしています)C++のスタック: "or"条件を切り替えるとランタイムエラーが発生する
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)関数では、このような状態「場合」:
(getMin()>=x || min_collector.empty())
私はランタイムエラーを取得し、他の誰がこの問題に直面していますか?なぜ "または"状態の順序が重要なのでしょうか?
スタックが空のときに 'min_collector.top()'に何が起こると思いますか? – tkausl
「なぜ注文を行うべきか」または「条件が関係するのはなぜですか?」短絡があるので:https://stackoverflow.com/questions/1799072/c-short-circuiting-of-booleans – Slava