前言
stack(栈)和 queue(队列)是 C++ 标准库中两种常用的适配器容器。它们的核心价值在于提供严格的数据访问规则——后进先出(LIFO)或先进先出(FIFO),广泛应用于算法设计和业务逻辑实现。本文聚焦实际使用,通过清晰的接口说明和场景示例,帮你快速掌握这两种容器的用法。
一、Stack 与 Queue 的核心特性
在写代码前,首先要明确两者的'数据访问规则',这是它们区别于其他容器的关键:
| 容器 | 核心规则 | 访问特性 | 适用场景 |
|---|---|---|---|
stack | 后进先出(LIFO) | 仅能访问'栈顶'元素 | 函数调用栈、表达式求值、撤销操作 |
queue | 先进先出(FIFO) | 仅能访问'队头'和'队尾'元素 | 任务调度、消息队列、广度优先搜索(BFS) |
两者的共性是'限制访问':不支持随机访问(如 [] 下标),也不支持迭代器遍历。这种设计强制遵循其数据规则,避免错误的访问方式。
二、Stack(栈):后进先出(LIFO)的容器
2.1 核心特性
- 访问规则:只能从'栈顶'添加或删除元素(最后入栈的元素最先出栈)。
- 适用场景:函数调用栈、表达式求值等。
2.2 头文件与定义
#include <stack>
using namespace std;
// 定义栈:默认存储 int 类型,底层依赖 deque 实现
stack<int> st;
// 可指定底层容器(如 vector、list)
stack<int, vector<int>> st_v; // 基于 vector 的栈
stack<int, list<int>> st_l; // 基于 list 的栈
2.3 常用接口全解析
| 接口 | 功能描述 | 示例 |
|---|---|---|
push(val) | 向栈顶添加元素,新元素成为新的栈顶 | st.push(10); |
pop() | 删除当前栈顶元素(操作后原栈顶的下一个元素成为新栈顶),无返回值,需先确保栈非空 |


