容器适配器概述
STL 中的 stack 和 queue 本质是容器适配器,它们基于基础容器封装实现特定操作逻辑。适配器可以理解为转换器,把原本不兼容的对象改造为适配特定场景的形式。容器适配器专门用来包装底层容器(如 deque、vector),屏蔽复杂接口,只暴露核心操作。
为什么不支持迭代器
stack 仅允许操作栈顶(LIFO),若暴露迭代器,用户能遍历所有元素,破坏设计意图。 queue 仅允许操作队首/队尾(FIFO),迭代器会打破两端操作的限制。 priority_queue 仅允许操作优先级最高的元素,遍历底层存储无实际意义。
容器适配器的价值在于用极简接口解决特定问题,而迭代器是通用遍历工具,二者目标相悖,因此天生不兼容。
stack 介绍
stack 是一种容器适配器,用于后进先出(LIFO)场景,插入和提取只能在容器一端进行。作为适配器,它通过包装某一底层容器实现,默认使用 deque。底层容器的尾部被当作栈顶,压入弹出操作都在这一端完成。
对底层容器的要求包括:empty、back、push_back、pop_back。标准容器 vector、deque、list 都满足要求。
stack 模拟实现
namespace bit {
template<class T, class Container = deque<T>>
class stack {
public:
// 压栈:将 x 插入栈顶
void push(const T& x) { _con.push_back(x); }
// 出栈:删除栈顶元素
void pop() { _con.pop_back(); }
// 获取栈顶元素
const T& top() { return _con.back(); }
// 判断栈是否为空
bool empty() { return _con.empty(); }
// 获取栈中元素个数
size_t size() { return _con.(); }
:
Container _con;
};
}


