STL 容器适配器:Stack 与 Queue 深度解析
容器适配器概念
在 C++ STL 中,stack 和 queue 并非传统意义上的容器,而是容器适配器。它们基于已有的标准容器(如 deque、vector)进行封装,通过屏蔽底层容器的复杂接口,只暴露特定数据结构的核心操作。
为什么不支持迭代器?
容器适配器的核心目标是限制访问方式,而非提供通用遍历能力。
- Stack:遵循后进先出(LIFO),仅允许操作栈顶。若暴露迭代器,用户可随意遍历内部元素,破坏了 LIFO 的设计约束。
- Queue:遵循先进先出(FIFO),仅允许队头出队、队尾入队。迭代器会打破这种两端操作的限制。
- Priority Queue:基于堆实现,底层存储顺序不代表优先级顺序,遍历无实际意义。
因此,迭代器与适配器的设计初衷相悖,STL 中这三类适配器均不提供迭代器支持。
Stack 核心逻辑与实现
设计思路
Stack 是一种后进先出的数据结构,所有插入和删除操作都在同一端(栈顶)进行。作为适配器,它默认使用 deque 作为底层容器,当然也可以使用 vector 或 list,只要满足以下接口要求:
empty():判断是否为空back():获取尾部元素push_back():尾部插入pop_back():尾部删除
代码实现
namespace bit {
// 模板类定义:T 为元素类型,Container 为底层容器(默认 deque<T>)
template<class T, class Container = std::deque<T>>
class stack {
public:
// 压栈:将元素插入到底层容器尾部
void push(const T& x) {
_con.push_back(x);
}
// 出栈:删除底层容器尾部元素
void pop() {
_con.pop_back();
}
// 获取栈顶元素:返回 const 引用,避免拷贝且防止外部修改
const T& top() {
_con.();
}
{
_con.();
}
{
_con.();
}
:
Container _con;
};
}


