我正在编写一个c ++代码来执行反向波兰表示法数学。为此,我有一个堆栈类,它有一个布尔方法 pop(value)
bool pop(int &value) {
if (isEmpty()) {
return false;
} else {
value = stack[topIndex];
return true;
}
};
其中堆栈的最高值存储在值中,然后从堆栈中删除。如果堆栈为空,则此pop方法返回 false ,否则返回 true 。
我的问题是,如果我使用 pop 方法,请执行以下操作:
int a, b;
if (!stack.pop(a) || !stack.pop(b)) {
cout << "Error: stack is empty: << endl;
}
两次返回 true 时,每种情况下堆栈的最高值是否会存储在 a 和 b 中,或者我是需要在 if 语句之外实现该方法吗?
答案 0 :(得分:5)
您的if
从左到右进行评估,对于
if (!stack.pop(a) || !stack.pop(b)) {
a
,然后设置b
。
另请注意,您的pop
方法实际上并没有实际弹出堆栈 - 您只返回最顶层的值。
答案 1 :(得分:3)
你有什么好。逻辑或运算符(||
)短路意味着右侧只有在左侧评估为false时才会执行。在第一次弹出成功的情况下,左侧是false
,因此右侧也将被评估,并且如果堆栈不为空,则存储适当的值。
答案 2 :(得分:2)
该值将存储在a和b中。
注意 pop函数传统上会删除列表的最后一个元素并将其返回给调用者。你在做什么不是流行音乐。
答案 3 :(得分:1)
是的,pop函数通常会在if语句中执行,因此将存储该值。