2015-02-11 43 views
0

我在写一个C++代码来执行Reverse Polish Notation math。对于这一点,我有有一个布尔方法弹出(值)如果在if语句中实现,函数将存储值吗?

bool pop(int &value) { 
    if (isEmpty()) { 
     return false; 
    } else { 
     value = stack[topIndex]; 
     return true; 
    } 
}; 

在堆栈顶部的值被存储在值,然后从堆栈的删除的堆栈类。如果堆栈为空,则此弹出方法返回false,否则返回true

我的问题是,如果我使用流行方法是这样的:

int a, b; 

if (!stack.pop(a) || !stack.pop(b)) { 
    cout << "Error: stack is empty: << endl; 
} 

其中两次返回,将堆栈每个箱子的顶值存储在b还是需要执行以外的方法if声明?

回答

5

由左到右,所以

if (!stack.pop(a) || !stack.pop(b)) {

a首先被设置,然后bif进行评估。

另请注意,对于您的pop方法,您从未实际弹出堆栈 - 您只返回最上面的值。

+0

谢谢。是的,我的流行方法并没有删除顶部元素。我会解决这个问题。 – 2015-02-11 20:16:23

+0

@JordanTaylor IMO在编写任何新的数据结构之前,最好有5分钟看看现有的数据结构。如果你使用C++,我会说你应该先看看std库的数据结构。然后你可以抓住常用术语。什么是流行什么是顶级的。 – Doonyx 2015-02-11 22:35:48

3

你有什么好。逻辑或运算符(||)短路意味着右侧仅在左侧评估为false时执行。在第一次弹出成功的情况下,左侧是false,因此也将评估右侧,并且如果堆栈不为空,则存储适当的值。

1

是的,pop函数通常会在if语句内执行,所以这个值会被存储。

2

该值将被存储在a和b中。

注意弹出功能传统上删除列表的最后一个元素并将其返回给调用者。你在做什么不是流行音乐。