一、栈(stack)——后进先出结构
基本特性
- 类似一摞盘子:最后放入的盘子最先取出
- 头文件:
#include <stack>
常用操作
stack<int> s; // 创建整型栈
s.push(10); // 元素入栈 → [10]
s.push(20); // → [10,20]
s.top(); // 返回栈顶元素 → 20
s.pop(); // 移除栈顶 → [10]
s.size(); // 返回元素个数 → 1
s.empty(); // 判断是否为空 → false
示例:反转数据
stack<char> charStack;
string str = "hello";
// 入栈
for(char c : str) {
charStack.push(c);
}
// 出栈获得逆序
while(!charStack.empty()) {
cout << charStack.top();
charStack.pop();
}
// 输出:olleh
二、队列(queue)——先进先出结构
基本特性
- 类似排队:先到的人先获得服务
- 头文件:
#include <queue>
常用操作
queue<string> q;
q.push("Alice"); // 队列 → ["Alice"]
q.push("Bob"); // → ["Alice", "Bob"]
q.front(); // 获取队首 → "Alice"
q.back(); // 获取队尾 → "Bob"
q.pop(); // 移除队首 → ["Bob"]
q.size(); // → 1
示例:消息处理
queue<string> msgQueue;
msgQueue.push("Task1");
msgQueue.push("Task2");
while(!msgQueue.empty()) {
cout << "Processing: " << msgQueue.front() << endl;
msgQueue.pop();
}
/* 输出:
Processing: Task1
Processing: Task2 */
三、如何选择
结构 | 适用场景 | 典型应用 |
---|---|---|
栈 | 需要后进先出 | 撤销操作、括号匹配、函数调用栈 |
队列 | 需要先进先出 | 打印队列、消息队列、BFS算法 |
四、注意事项
- 访问top()/front()前务必检查容器是否为空
- pop()操作只移除元素不返回值
- 可通过size()实现有限容量控制
- 支持所有基础类型和自定义类型
总结
通过STL提供的stack和queue,无需手动实现数据结构,直接享受高效的内存管理。