引言
在 C++ 标准库中,STL 提供了丰富的容器适配器,其中栈(Stack)和队列(Queue)是最常用的两种。它们是对底层容器的封装,简化了特定数据结构的开发流程。
容器适配器
什么是容器适配器
适配器模式的核心在于将一个类的接口转换成客户希望的另一个接口。在 STL 中,容器适配器通过包装底层容器来提供特定的操作限制。
底层容器的选择
Stack 和 Queue 默认使用 deque 作为底层容器,而 priority_queue 默认使用 vector。这是因为 deque 支持在头尾两端高效插入和删除,符合栈和队列的需求;而 priority_queue 需要随机访问和堆操作,vector 在内存布局和性能上更优。
标准库中的 Stack
基本概念
Stack 遵循后进先出(LIFO)原则。使用时需包含 <stack> 头文件。
常用接口
| 函数 | 说明 |
|---|---|
empty() | 检测是否为空 |
size() | 返回元素个数 |
top() | 返回栈顶元素引用 |
push() | 压入元素 |
pop() | 弹出栈顶元素 |
这些接口设计得很直观,实际使用中直接调用即可。下面是一个简单的演示:
int main() {
std::stack<int> st;
st.push(1);
st.push(2);
st.push(3);
while (!st.empty()) {
std::cout << st.top() << " ";
st.pop();
}
return 0;
}
模拟实现
我们可以利用模板类自行实现一个简单的 Stack,通常基于 deque 或 vector。这里以 deque 为例,注意不要混淆 back() 和 top() 的语义。
Stack {
< , = std::deque<T>>
stack {
:
( T& x) { _c.(x); }
{ _c.(); }
{ _c.(); }
{ _c.(); }
{ _c.(); }
:
Con _c;
};
}


