如何在STL中实现Stack?

ssk*_*ssk 0 c++ implementation stack stl

我遇到了这个:

标准C ++容器

这引发了我一个问题,即如何在STL中实现堆栈?

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

C ++ std :: vector如何实现?

STL中真正的双端队列是什么?

Ste*_*sop 5

std::stack有一个模板参数Container,要求是一个容器,可以存放type元素T(也就是栈的元素的类型)。这种容器需要具有back()push_back()pop_back()功能,并且在标准容器vectordeque以及list所有满足要求。

因此,无论用户指定哪种容器类型,生成的实例化std::stack都是一个类:

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

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


M.M*_*M.M 5

stack是使用用于底层存储另一个容器中,和链接的功能的适配器pushpopemplace等,以实现相关功能的基础容器。

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

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