2016-01-01 29 views
-4

例如,让charStack是一个只包含堆栈的堆栈,我想创建一个函数,从堆栈中弹出元素,直到堆栈的顶部是')'。当然,如果')'不是堆栈中的元素,抛出异常什么是更好的方式来弹出并找到堆栈中的元素

以下哪种方法是使用以达到上述目的的更好方法?为什么? (问题是C++语言如果有另一种主要语言更好的解决办法,请解释。)

方法一:流行而

While(!charStack.isEmpty() && charStack.top()!= ')'){ 
    func(charStack.pop());} 
if(charStack.isEmpty()) 
    throw exception; 
return func2(charStack.pop()); 

方法2:真实而

While(true){ 
    if(charStack.isEmpty()) 
    throw exception; 
    if(charStack.top()== ')') 
     break; 
    func(charStack.pop());} 
return func2(charStack.pop()); 

FUNC1 - 处理所有元素的一般(无效)功能直到')'

func2-处理')'的一般功能

+0

什么是“主”语言?你的意思是“主流”还是“通用”? – Downvoter

+1

@cad:Brainfuck,显然。它有堆栈。 – Zeta

+0

@Zeta我正在考虑更多关于空白,但确定... – Downvoter

回答

0

您应该避免使用while(true)循环,因为它们使代码有点不可读。对于读者(谁从来没有见过你的代码),这个周期变得“无限”,直到他发现破坏条件。另一方面,如果while循环包含良好的条件,读者可以很容易地理解这个循环的生命周期。所以,我更喜欢第一种方法。

+0

我的直觉和你一样。然而,我注意到当'()'在堆栈中时,While(true)方法调用函数isEmpty()比method1少一次,尝试在堆栈顶部运行 - > ['3',')',' 5'] – Idan

+0

如果isEmpty方法调用的次数很重要,则(true)变量更可取。 – Andreikkaa

+0

我想等待更多的答案,如果有的话。 – Idan

相关问题