2016-03-11 39 views
-1

我碰到這樣的:Stack如何在STL中實現?

Standard C++ Containers

這引發了我的問題,如何在STL實現棧?

我尋找類似的描述:

How is C++ std::vector implemented?

What really is a deque in STL?

+3

什麼在鏈接中的'stack'適配器的描述你提供的是造成混亂?關於該適配器的另一個文檔[可以在這裏找到**](http://en.cppreference.com/w/cpp/container/stack),並且我高度贊同您將該網站加入書籤。它作爲C++參考非常出色,是最好的imho之一。 – WhozCraig

回答

4

stack是一個適配器,它使用另一個容器作爲底層存儲,並將函數push,pop,emplace等鏈接到底層容器中的相關函數。

缺省情況下,使用std::stack作爲std::deque基礎容器。但是你可以指定你自己的,例如std::stack<T, std::vector<T>> s;

有關更多細節,請參見cppreference

3

std::stack具有模板參數Container,這是需要是能夠存儲T類型的元素的容器(即就是說,堆棧元素的類型)。這種容器需要具有back()push_back()pop_back()和功能,以及在標準容器vectordequelist和所有滿足要求。

所以,取容器鍵入用戶指定,將所得的std::stack實例是其中一類:

  • 具有Container<T>型(或其它的數據成員,如果不是字面上的數據成員非常相似我想它可能可能是一個私人基類)。
  • 電話push_back()每當你在棧上調用push()在容器上。
  • 電話pop_back()每當你在棧上調用pop()在容器上。
  • 等等。

寬泛地說,std::stack<T>是一個封裝起來的std::deque<T>一個實例的對象,並隱藏大多數的deque的功能,以呈現更簡單的界面用作後進先出(LIFO)隊列。同樣std::queue提供了一個FIFO隊列。