C++ STL Stack, Queue及Vector详解与操作示例
下载需积分: 21 | DOC格式 | 47KB |
更新于2024-09-09
| 199 浏览量 | 举报
在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中的栈、队列和优先队列的基本操作和用法,这些数据结构在算法设计、事件处理和许多其他场景中都发挥着重要作用。
相关推荐
![filetype](https://img-home.csdnimg.cn/images/20241231044930.png)
![filetype](https://img-home.csdnimg.cn/images/20241231044833.png)
![filetype](https://img-home.csdnimg.cn/images/20241231044930.png)
![filetype](https://img-home.csdnimg.cn/images/20210720083327.png)
![filetype](https://img-home.csdnimg.cn/images/20210720083327.png)
![filetype](https://img-home.csdnimg.cn/images/20210720083327.png)
![filetype](https://img-home.csdnimg.cn/images/20241231045053.png)
![filetype](https://img-home.csdnimg.cn/images/20241231044955.png)
![filetype](https://img-home.csdnimg.cn/images/20241231044930.png)
![](https://profile-avatar.csdnimg.cn/a6967cab7ce7454090d5dafdb2cba7d8_weixin_45485187.jpg!1)
楚颜a
- 粉丝: 204
最新资源
- Spring事务测试详解:属性配置与注解XML方法
- QQ聊天程序的格式转化demo演示
- C++开发的综合评价模型实现解析
- MyBatis代码生成工具:轻松实现Mapper与实体类
- 实现前端注册界面与数据验证的教程
- Java实现树形数据结构及遍历算法教程
- 安徽OI:2001-2012年AHOI试题与数据解析
- Java顺序搜索方法详解与实践
- Android Bitmap合并工具库:高效合并图片无内存溢出
- MATLAB水果图片分类与识别技术解析
- JAVA经典算法书《算法第四版》高清PDF版
- SX1261/2无线收发芯片技术手册解析
- Space Force高清壁纸插件: 新标签页主题体验
- 解密手持频谱分析仪:原理图和源码详解
- OpenCV 3.2.0 3rdparty依赖包下载指南
- 实现Android动态图表:折线、柱状与饼状图