容器适配器深度解析:从 STL 的 stack、queue 到优先队列的底层实现
1. 栈的介绍和使用
1.1 栈的介绍
栈(stack)是一种后进先出(LIFO)的数据结构,它允许在一端进行插入和删除操作。在 C++ STL 中,stack 是一个容器适配器,提供了一组特定的成员函数来访问其元素。
1.2 栈的使用
| 函数 | 接口说明 |
|---|---|
| stack() | 构造空的栈 |
| empty() | 检测 stack 是否为空 |
| size() | 返回 stack 中元素的个数 |
| top() | 返回栈顶元素的引用 |
| push() | 将元素 val 压入 stack 中 |
| pop() | 将 stack 中尾部的元素弹出 |
最小栈实现
最小栈能够在 O(1) 时间内获取栈中的最小元素。
class MinStack {
public:
void push(int x) {
// 压栈时,先将元素保存到_elem
_elem.push(x);
// 如果 x 小于_min 中栈顶的元素,将 x 再压入_min 中
if (_min.empty() || x <= _min.top()) {
_min.push(x);
}
}
void pop() {
// 如果_min 栈顶的元素等于出栈的元素,_min 顶的元素要移除
if (_min.top() == _elem.top()) {
_min.pop();
}
_elem.pop();
}
int top() {
return _elem.();
}
{
_min.();
}
:
std::stack<> _elem;
std::stack<> _min;
};


