C++ STL Stack, Queue及Vector详解与操作示例
需积分: 21 121 浏览量
更新于2024-09-09
收藏 47KB DOC 举报
在C++中,标准模板库(Standard Template Library, STL)提供了几种基础的数据结构容器,如栈(Stack)、队列(Queue)和向量(Vector),它们在处理数据时具有不同的特性和用途。本文将详细介绍这些容器的使用方法以及它们在程序中的应用场景。
1. **Stack (栈)**:
- `top()`函数用于获取栈顶元素,但不会将其移除。这对于需要查看但不改变栈顶元素的情况非常有用。
- `empty()`函数用来检查栈是否为空,返回布尔值,如果为空则为`true`,反之为`false`。
- `size()`函数返回栈中元素的数量。
- `push()`函数用于在栈顶添加新元素,常用于后进先出(Last In, First Out, LIFO)的数据结构需求。
- `pop()`函数用于移除并返回栈顶元素,实现数据的出栈操作。
以下是一个栈的示例代码:
```cpp
#include <iostream>
#include <stack>
using namespace std;
void main() {
stack<char> v;
for (int i = 0; i < 10; i++) {
v.push(i + 97); // 将字符 'a' 到 'j' 入栈
}
cout << v.size() << endl; // 输出栈的大小
while (!v.empty()) { // 遍历并打印栈顶元素
cout << v.top() << "";
v.pop();
}
}
```
2. **Queue (队列)**:
- `empty()`同样用于判断队列是否为空。
- `front()`函数返回队列的前端元素,即第一个加入的元素。
- `pop()`函数移除并返回队头元素,遵循先进先出(First In, First Out, FIFO)原则。
- `back()`返回队列的后端元素,即最后加入的元素。
- `push()`函数在队尾插入新元素。
一个队列的示例代码如下:
```cpp
#include <iostream>
#include <queue>
using namespace std;
int main() {
queue<int> q;
for (int i = 0; i < 5; i++) {
q.push(i); // 将数字0到4依次入队
}
while (!q.empty()) {
cout << q.front() << endl; // 打印队头元素并出队
q.pop();
}
return 0;
}
```
3. **Priority Queue (优先队列)**:
- 优先队列是特殊类型的队列,它允许用户根据自定义的优先级对元素进行排序。
- 每次`push()`和`pop()`操作会动态调整队列内部的顺序,以确保符合用户设置的优先级。
- `top()`返回队列头部(即优先级最高的)元素。
- 默认情况下,优先队列使用元素类型的 `<` 操作符来确定优先级。例如,`priority_queue<int>` 中,较大的整数有更高的优先级。
在优先队列的应用示例中,例如使用`<`操作符,将数字5, 3, 2, 4, 6依次`push`到`priority_queue`中,输出结果将是最大的数字6,然后是5,依此类推。
```cpp
priority_queue<int> pq; // 默认按数值大小排序,6最大
pq.push(5);
pq.push(3);
pq.push(2);
pq.push(4);
pq.push(6);
// 输出:6 5 4 3 2
```
另一种情况是,如果希望小数具有更高的优先级,可以使用`greater<int>`作为比较器:
```cpp
priority_queue<int, vector<int>, greater<int>> pq; // 小的整数优先
```
通过以上介绍,你可以理解C++ STL中的栈、队列和优先队列的基本操作和用法,这些数据结构在算法设计、事件处理和许多其他场景中都发挥着重要作用。
2011-12-10 上传
127 浏览量
131 浏览量
251 浏览量
2024-12-01 上传
5 9 C:\Users\86186\Desktop\stl\Project1\vector1.cpp [Error] expected primary-expression before 'int'
2024-03-11 上传
179 浏览量
106 浏览量
433 浏览量

楚颜a
- 粉丝: 204
最新资源
- 掌握Ember.js用户活跃度跟踪,实现高效交互检测
- 如何在Android中实现Windows风格的TreeView效果
- Android开发:实现自定义标题栏的统一管理
- DataGridView源码实现条件过滤功能
- Angular项目中Cookie同意组件的实现与应用
- React实现仿Twitter点赞动画效果示例
- Exceptionless.UI:Web前端托管与开发支持
- 掌握Ruby 1.9编程技术:全面英文指南
- 提升效率:在32位系统中使用RamDiskPlus创建内存虚拟盘
- 前端AI写作工具:使用AI生成内容的深度体验
- 综合技术源码包:ASP学生信息管理系统
- Node.js基础爬虫教程:入门级代码实践
- Ruby-Vagrant:简化虚拟化开发环境的自动化工具
- 宏利用与工厂模式实践:驱动服务封装技巧
- 韩顺平Linux学习资料包:常用软件及数据库配置
- Anime-Sketch-Colorizer:实现动漫草图自动化上色