容器适配器概述
在 C++ STL 中,stack 和 queue 本质上是容器适配器。它们基于基础容器(如 deque、vector)封装实现特定操作逻辑,屏蔽了底层容器的复杂接口,只暴露栈或队列的核心功能。
为什么不支持迭代器?
容器适配器的核心目标是限制访问方式,而非提供通用遍历能力:
- stack:遵循后进先出(LIFO),仅允许操作栈顶。若暴露迭代器,用户可遍历所有元素,破坏设计意图。
- queue:遵循先进先出(FIFO),仅允许队首/队尾操作。迭代器会打破两端操作的限制。
- priority_queue:仅允许操作优先级最高的元素(堆顶),底层存储顺序并非优先级顺序,遍历无实际意义。
这种极简的接口设计正是为了用最低成本解决特定场景问题。
Stack 详解
Stack 是一种专门用于 LIFO 场景的容器适配器。元素的插入和提取只能在容器的一端进行,通常将底层容器的尾部视为栈顶。
对底层容器的要求
底层容器需支持以下操作:
empty:判断是否为空back:获取尾部元素push_back:尾部插入pop_back:尾部删除
标准容器 vector、deque、list 均满足要求,默认使用 deque。
模拟实现
namespace bit {
template<class T, class Container = std::deque<T>>
class stack {
public:
// 压栈:调用底层容器的 push_back
void push(const T& x) { _con.push_back(x); }
// 出栈:调用底层容器的 pop_back
void pop() { _con.pop_back(); }
// 获取栈顶元素:返回 const 引用,避免拷贝且防止外部修改
const T& top() { return _con.back(); }
// 判空
bool empty { _con.(); }
{ _con.(); }
:
Container _con;
};
}


