2013-06-12 136 views
0

我想將內容從堆棧收件箱移動到發件箱,然後返回發件箱的頂部。但是pop的返回類型是無效的,所以代碼會拋出一個錯誤:void value不應該被忽略,因爲它應該是。如何將內容從一個堆棧移動到另一個堆棧?

值如何移動?

下面是代碼:

template <class E> 
class Queue 
{ 

    private: 
     stack<E> inbox; 
     stack<E> outbox; 

    public: 
    void enqueue(E item) { 
     inbox.push(item); 
    } 

    E dequeue() { 
     if (outbox.empty()) { 
      while (!inbox.empty()) { 
       outbox.push(inbox.pop()); 
      } 
     } 

     return outbox.pop(); 
    } 

}; 
+2

看看[文檔堆棧](http://en.cppreference.com/w/cpp/container/stack),你會發現[top()](http://en.cppreference.com/w/CPP /容器/堆疊/頂部)。 –

+0

如果你在談論標準庫 - 爲什麼不看看堆棧的API? Pop不用於返回對象,它只是刪除頂部對象。 – Nick

回答

6

它的stack::top返回堆棧的頂部。 stack::pop只是刪除頂部元素而沒有返回它。

E dequeue() { 
    if (outbox.empty()) { 
     while (!inbox.empty()) { 
      outbox.push(inbox.top()); 
      inbox.pop(); 
     } 
    } 
    E ret = outbox.top(); 
    outbox.pop(); 
    return ret; 
} 
+1

作爲參考,[GOTW 8](http://www.gotw.ca/gotw/008.htm)以解決方案彈出方法的評論顯示了以這種方式設計界面的原因。它雖然老了,所以也許不要把其餘的作爲福音。 – Useless

0

您可以top()訪問的最後一個元素,然後從堆棧pop()刪除它。請參閱here以供參考。

0

inbox.pop只是從堆棧中刪除頂層元素。 inbox.top返回頂部元素,之後您可以使用inbox.pop將其刪除。

相關問題