在 C++ 标准库中,容器适配器(Container Adapters)是一种基于现有容器实现的特殊结构。它们通过封装底层容器(如 vector、deque、list 等),隐藏了部分特性,仅暴露适配后的操作接口。
简单来说,容器适配器不直接存储数据,而是依赖模板参数指定的底层容器来管理内存。最典型的三种是 std::stack(栈)、std::queue(队列)和 std::priority_queue(优先队列)。
一、核心特点
- 接口简化:只提供特定场景需要的操作。例如栈没有迭代器,无法遍历内部元素。
- 底层可配置:可以通过模板参数指定底层容器,但需满足适配器的操作要求(如栈需要 push_back、pop_back 等接口)。
- 无迭代器:适配器不提供迭代器,只能通过其特定接口操作。
由于栈和队列的接口相对简单,我们重点通过模拟实现来理解其背后的逻辑。既然底层是其他容器,插入删除等操作本质上是由底层容器完成的,我们只需调用底层容器的函数即可。
二、三大容器适配器
1. 栈(stack)
栈遵循后进先出(LIFO)原则。默认底层容器为 deque,也可以指定为 vector 或 list。
- push:在栈顶插入,对应底层容器的
push_back。 - top:获取栈顶数据,对应底层容器的
back。 - pop:删除栈顶数据,对应底层容器的
pop_back。 - empty / size:判断空或获取大小,直接委托给底层容器。
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 { _con.(); }
:
Container _con;
};


