C++ Stack与Queue详解掌握指南》:带领你从基础夯实到玩转栈与队列容器
·
在写代码前,首先要明确两者的 “数据访问规则”—— 这是它们区别于其他容器的关键:
|
容器 |
核心规则 |
访问特性 |
适用场景 |
|---|---|---|---|
|
stack |
后进先出 |
仅能访问“栈顶”元素 |
函数调用栈、表达式求值、撤销操作 |
|
queue |
先进先出 |
仅能访问“队头”和“队尾”元素 |
任务调度、消息队列、广度优先搜索 |
两者的共性是 “限制访问”:不支持随机访问(如 [] 下标),也不支持迭代器遍历 —— 目的是强制遵循其数据规则,避免错误的访问方式
二. Stack(栈):后进先出
2.1 核心特性:
- 访问规则:只能从"栈顶"添加或删除元素(最后入栈的元素最先出栈)
- 适用场景:函数调用栈,表达式求值等

2.2 头文件与定义
代码语言:javascript
AI代码解释
#include <stack> //头文件
using namespace std;
// 定义栈:默认存储int类型,底层依赖deque实现
stack<int> st;
// 可指定底层容器
stack<int, vector<int>> st_v; // 基于vector的栈
stack<int, list<int>> st_l; // 基于list链表的栈
2.3 常用接口大全
|
接口 |
功能描述 |
示例 |
|---|---|---|
|
push(val) |
向栈顶添加元素,新元素成为新的栈顶 |
st.push(10) |
|
pop() |
删除当前栈顶元素(操作后原栈顶的下一个元素成为新栈顶),无返回值,需先确保栈非空 |
st.pop() |
|
top() |
返回栈顶元素的引用(可直接读取或修改栈顶值),需先确保栈非空 |
int x = st.top();(读取);st.top() = 20;(修改) |
|
size() |
返回栈中当前存储的元素总个数,返回值为无符号整数(size_t) |
cout << st.size(); |
|
empty() |
判断栈是否为空,若栈中无元素则返回 true,否则返回 false |
if (!st.empty()) { ... } |
2.4 用法演示
代码语言:javascript
AI代码解释
void test_stack()
{
stack<int> st;
st.push(1);
st.push(2);
st.push(3);
st.emplace(4);
while (!st.empty())
{
cout << st.top() << " ";
st.pop();
}
cout << endl;
}
int main()
{
test_stack();
}

三. Queue(队列):先进先出
3.1 核心特性:
- 访问规则:从"队尾"添加元素,从"队头"删除元素(最先入队的元素最先出队)
更多推荐
所有评论(0)