C++ 标准库容器适配器详解
在 C++ STL 中,stack、queue 和 priority_queue 是非常常用的数据结构。它们虽然名字像容器,但实际上属于容器适配器。这意味着它们不是直接管理内存的底层容器,而是对其他容器(如 vector、deque、list)的接口进行了封装,提供了特定的操作方式。
一、Stack:后进先出
1. Stack 介绍
stack 遵循后进先出(LIFO)原则。默认情况下,它使用 deque 作为底层容器,但也可以指定 vector 或 list。头文件为 <stack>。

2. Stack 常用接口
| 函数说明 | 接口说明 |
|---|---|
| stack() | 构造空的栈 |
| empty() | 检测 stack 是否为空 |
| size() | 返回 stack 中元素的个数 |
| top() | 返回栈顶元素的引用 |
| push() | 将元素 val 压入 stack 中 |
| pop() | 将 stack 中尾部的元素弹出 |
3. 实战案例:最小栈 (Min Stack)
LeetCode 155 题要求设计一个支持 push、pop、top 以及获取最小值 getMin 操作的栈,且所有操作的时间复杂度必须是 O(1)。
思路:
我们可以维护两个栈:主栈 st 用于存储数据,辅助栈 minst 用于记录当前状态下的最小值。当 st 插入新元素时,如果 minst 为空或者新元素小于等于 minst 的栈顶,则同步压入 minst。弹出时,如果 st 的栈顶等于 minst 的栈顶,说明当前最小值即将被移除,minst 也要同步弹出。
代码实现:
class MinStack {
public:
MinStack() {}
{
_st.(val);
(_minst.() || val <= _minst.())
_minst.(val);
}
{
(!_st.() && _st.() == _minst.())
_minst.();
(!_st.()) _st.();
}
{
_st.();
}
{
_minst.();
}
:
stack<> _st;
stack<> _minst;
};




