Stack在STL中是如何实现的?

How is Stack implemented in STL?

我遇到了这个:

Standard C++ Containers

这引发了我的疑问,堆栈在 STL 中是如何实现的?

我正在寻找类似于以下内容的描述:

How is C++ std::vector implemented?

What really is a deque in STL?

std::stack有一个模板参数Container,要求是一个容器,可以存放T类型的元素(即元素的类型堆栈)。要求此容器具有back()push_back()pop_back()功能,标准容器vectordequelist均满足要求.

因此,无论用户指定哪种容器类型,std::stack 的实例化结果都是 class,其中:

  • 有一个 Container<T> 类型的数据成员(或者非常相似的东西,如果不是字面上的数据成员的话。我想它可能是一个私有基础 class)。
  • 每当您在堆栈上调用 push() 时,都会在容器上调用 push_back()
  • 每当您在堆栈上调用 pop() 时,都会在容器上调用 pop_back()
  • 等等。

粗略地说,std::stack<T> 是一个对象,它包装了 std::deque<T> 的实例,并隐藏了 deque 的大部分功能以呈现更简单的界面 用作后进先出(LIFO)队列。类似地 std::queue 呈现一个 FIFO 队列。

stack是一个适配器,底层存储使用另一个容器,将pushpopemplace等函数链接到其中的相关函数底层容器。

默认情况下,std::stack 使用 std::deque 作为基础容器。但是你可以指定你自己的,例如std::stack<T, std::vector<T>> s;.

有关此的更多详细信息,请参阅 cppreference