C++标准模板库(STL)详解:vector、set、unordered_set、queue、deque、map与unorder...
需积分: 0 201 浏览量
更新于2024-08-30
收藏 331KB PPTX 举报
ACM-7.pptx 是一份关于ACM程序设计的课程资料,涵盖了C++中的一些常用容器和数据结构,特别是STL(标准模板库)中的vector、set、unordered_set、queue、deque、map以及unordered_map。这些容器在解决算法和编程问题时非常关键。
1. **vector**:动态数组,适用于数组长度不确定的情况。可以通过下标或迭代器访问元素。但是,由于动态内存分配,寻址速度较普通数组慢。包含在`<vector>`头文件中。注意,虽然可以直接通过下标访问,但不自带`find`函数,可能需要借助变异函数。
2. **set**:自动去重并保持元素排序的集合。例如,`set<int, greater<int>> s={...}`创建一个降序的set。包含在`<set>`头文件中。set的操作通常比unordered_set效率低,因为其维护排序。
3. **unordered_set**:只去重不排序的集合,效率通常高于set,但不保证元素顺序。在C++11中引入,不适用于所有平台,如蓝桥环境。包含在`<unordered_set>`头文件中。
4. **queue**:先进先出(FIFO)的数据结构,常用于BFS搜索算法。只能在队尾插入,队头删除。包含在`<queue>`头文件中,没有`clear`函数,且不能通过迭代器遍历。
5. **deque**:双端队列,可以在两端快速插入和删除元素,功能比queue更强大。包含在`<deque>`头文件中,适用于需要在两端频繁操作的场景。
6. **map**:键值对映射,自动根据键值排序。每个键在map中唯一,可视为键和值的结构体。包含在`<map>`头文件中,下标不受类型限制。
7. **unordered_map**:与map类似,但不自动排序,提供更快的查找速度。C++11引入,不适用于所有平台。包含在`<unordered_map>`头文件中。
8. **迭代器(iterator)**:用于遍历容器元素,如`vector<int>::iterator it=vect.begin();`,可以使用`it++`或`advance(it, n)`来移动迭代器位置。
示例1展示了如何使用`set`为`vector`去重:
```cpp
#include<iostream>
#include<vector>
#include<set>
using namespace std;
int main() {
vector<int> v={2,4,2,5,9,1,66,33,66,4,9,1};
set<int> s(v.begin(), v.end()); // 将vector元素复制到set中,自动去重
vector<int> uniqueV(s.begin(), s.end()); // 从set中重构无重复的vector
return 0;
}
```
这份资料对于理解和掌握C++ STL中的各种容器及其应用非常有帮助,特别是在ACM竞赛和算法实现中。理解这些容器的特性和使用场景是提高编程效率的关键。
2022-11-21 上传
2020-12-20 上传
2021-02-20 上传
2019-10-26 上传
2021-10-11 上传
2021-05-20 上传
2021-10-02 上传
Cazkeen
- 粉丝: 3
- 资源: 6
最新资源
- StarModAPI: StarMade 模组开发的Java API工具包
- PHP疫情上报管理系统开发与数据库实现详解
- 中秋节特献:明月祝福Flash动画素材
- Java GUI界面RPi-kee_Pilot:RPi-kee专用控制工具
- 电脑端APK信息提取工具APK Messenger功能介绍
- 探索矩阵连乘算法在C++中的应用
- Airflow教程:入门到工作流程创建
- MIP在Matlab中实现黑白图像处理的开源解决方案
- 图像切割感知分组框架:Matlab中的PG-framework实现
- 计算机科学中的经典算法与应用场景解析
- MiniZinc 编译器:高效解决离散优化问题
- MATLAB工具用于测量静态接触角的开源代码解析
- Python网络服务器项目合作指南
- 使用Matlab实现基础水族馆鱼类跟踪的代码解析
- vagga:基于Rust的用户空间容器化开发工具
- PPAP: 多语言支持的PHP邮政地址解析器项目