在 C++ 标准库里,stack、queue 和 priority_queue 并不是独立容器,而是建立在已有容器之上的适配器。它们接管了底层容器的内存管理,但只暴露有限的接口,强迫你按特定方式访问数据。
接口简化、底层可配置、没有迭代器,是它们共同的特点。没有迭代器可能让人不习惯,但这正是设计意图:防止你破坏栈或队列的约束。
要理解它们的工作方式,最直接的办法就是自己动手写一个简化版。下面分别拆解。
栈(stack)
栈的默认底层容器是 std::deque,你也可以换成 vector 或 list——只要它们支持 push_back、pop_back 和 back。这三个操作分别对应栈的 push、pop、top。size 和 empty 直接转发。
template<class T, class Container = deque<T>>
class stack {
public:
void push(const T& x) { _con.push_back(x); }
const T& top()const { return _con.back(); }
void pop() { _con.pop_back(); }
bool empty()const { return _con.empty(); }
size_t size()const { return _con.size(); }
private:
Container _con;
};
队列(queue)
队列默认也用 deque,差别在于它提供 front 和 back,并且 pop 操作针对队头(pop_front)。其余 push、empty、size 的实现与栈如出一辙。
template<class T, class Container = deque<T>>
queue {
:
( T& x) { _con.(x); }
{ _con.(); }
{ _con.(); }
{ _con.(); }
{ _con.(); }
{ _con.(); }
:
Container _con;
};


