簡體   English   中英

如何在STL中實現Stack?

[英]How is Stack implemented in STL?

我遇到了這個:

標准C ++容器

這引發了我一個問題,即如何在STL中實現堆棧?

我正在尋找類似於以下內容的描述:

C ++ std :: vector如何實現?

STL中真正的雙端隊列是什么?

stack是一個適配器,它使用另一個容器作為基礎存儲,並將pushpopemplace等功能鏈接到基礎容器中的相關功能。

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

有關此的更多詳細信息,請參見cppreference

std::stack具有模板參數Container ,它必須是可以存儲T類型的元素(即,堆棧元素的類型)的容器。 該容器必須具有back()push_back()pop_back()函數,並且標准容器vectordequelist都滿足要求。

因此,無論用戶指定哪種容器類型, std::stack的最終實例化都是一個類,該類:

  • 具有類型為Container<T>的數據成員(或者如果不是字面意義上的數據成員,則非常相似。我想它可能是私有基類)。
  • 每當您在堆棧上調用push()時,都會在容器上調用push_back()
  • 每當您在堆棧上調用pop()時,都會在容器上調用pop_back()
  • 等等。

松散地說, std::stack<T>是一個包裝std::deque<T>實例的對象,並隱藏了大多數deque的功能,以便呈現一個更簡單的接口, 僅用作后處理-先進先出(LIFO)隊列。 同樣, std::queue表示一個FIFO隊列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM