How is Stack implemented in STL?

时间:2016-03-11 00:50:41

标签: c++ stl stack implementation

I came across this:

Standard C++ Containers

中的文字

它引发了我的问题,如何在STL中实现堆栈?

我正在寻找类似于:

的描述

How is C++ std::vector implemented?

What really is a deque in STL?

2 个答案:

答案 0 :(得分:4)

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队列。

答案 1 :(得分:4)

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

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

有关详细信息,请参阅cppreference