C++ STL源码剖析之容器配接器stack与queue、priority_queue
为何stack与queue不被称为容器呢?
试读章节 · 登录解锁全文
1.5 小时
C++ STL源码剖析之容器配接器stack与queue、priority_queue
0.导语
为何stack与queue不被称为容器呢?
下面本节带着这个问题来深入源码分析。
1.stack
在stack的源码中我们关注两点:
- 默认
_Sequence为deque - 内部函数实现是调用
_Sequence对应容器的函数。

template<typename _Tp, typename _Sequence = deque<_Tp> >
class stack
{
public:
typedef typename _Sequence::value_type value_type;
typedef typename _Sequence::reference reference;
typedef typename _Sequence::const_reference const_reference;
typedef typename _Sequence::size_type size_type;
typedef _Sequence container_type;
protected:
// See queue::c for notes on this name.
_Sequence c;
public:
reference
top()
{
__glibcxx_requires_nonempty();
return c.back();
}
void
push(const value_type& __x)
{ c.push_back(__x); }
}
测试stack底层容器
对于stack来说,底层容器可以是vector、deque、list,但不可以是map、set。
由于编译器不会做全面性检查,当调用函数不存在的时候,就编译不通过,所以对于像set虽然不能作为底层容器,但如果具有某些函数,调用仍然是成功的,直到调用的函数不存在。
…