栈和队列是 STL
(C++
标准库) 里面的两个数据结构。
栈是以底层容器完成其所有的工作,在底层容器之上对外提供统一的接口,底层容器是可插拔的,即我们可以控制使用哪种容器来实现栈的功能。
栈的底层实现可以是 vector
, deque
(double-ended queue), list
都是可以的,主要是数组和链表的底层实现。
所以 STL 中栈往往不被归类为容器,而被归类为 container adapter (容器适配器)。
常用的 SGI STL
,如果没有指定底层实现,默认是以 deque
为栈的底层结构。
deque
是一个双向队列,只要封住一端,只开通另一端就可以实现栈的逻辑了。
我们也可以指定 vector
为栈的底层实现,初始化语句如下:
std::stack<int, std::vector<int> > third; // 使用vector为底层容器的栈
队列是先进先出的数据结构,和栈同样不允许遍历,不提供迭代器, SGI STL
中,队列一样默认是以
deque
为底层数据结构。
同样可以指定 list
为其底层实现,初始化 queue
的语句如下:
std::queue<int, std::list<int>> third; // 定义以list为底层容器的队列
所以 STL 队列也不被归类为容器,而被归类为 container adapter (容器适配器)。