2016-01-01 50 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

相關問題