
C++容器详解:vector, deque, string, set, map等操作总结
下载需积分: 0 | 310KB |
更新于2024-08-05
| 113 浏览量 | 举报
收藏
"C++容器概览与常用操作"
在C++编程中,容器是STL(Standard Template Library,标准模板库)的重要组成部分,用于存储和管理数据。本篇主要总结了C++中几种常见的容器,包括`vector`、`deque`、`string`、`list`、`set`、`map`以及`priority_queue`,并详细阐述了它们的基本操作。
1. **`vector`**:动态数组,提供高效随机访问。通过下标进行访问,如`s[i]`。`push_back()`用于在末尾添加元素,`pop_back()`删除末尾元素。`insert(pos, elem)`在指定位置插入元素,`erase(pos)`或`erase(beg, end)`删除元素。`resize(num)`调整大小,`clear()`清空容器,`size()`返回元素数量,`empty()`检查是否为空,`front()`和`back()`分别获取首尾元素,`begin()`和`end()`返回迭代器。
2. **`deque`**:双端队列,允许在两端进行高效插入和删除。其操作与`vector`类似,但更适用于两端操作。
3. **`string`**:字符串类,提供了许多字符串操作,如`substr(pos, n)`截取子串,`find()`查找字符或子串,`find_first_of()`和`find_last_of()`查找特定字符集合中的第一个或最后一个匹配项。
4. **`list`**:双向链表,支持快速的前向和后向遍历,但随机访问效率较低。`find()`函数可用于查找元素,返回迭代器。`begin()`、`end()`、`rbegin()`、`rend()`、`cbegin()`和`cend()`分别表示正向和反向迭代器的起始和结束。
5. **`set`**:集合容器,存储唯一元素且自动排序。插入元素时会自动排序,如`insert(x)`。
6. **`map`**:关联容器,以键值对形式存储数据,每个键值唯一。插入键值对使用`insert(pair<key, value>)`。
7. **`priority_queue`**:优先队列,元素按优先级排序,通常默认从大到小。插入元素用`push(x)`,取出最大元素用`top()`,删除最大元素用`pop()`。
8. **排序函数**:`sort()`可对容器或数组进行排序,例如`vector<int>`或`string[]`。`upper_bound()`和`lower_bound()`用于查找大于或大于等于给定值的第一个元素的位置,返回迭代器。
9. **`pair`**:用于存储两个不同类型的数据,如`pair<t1, t2> x(x1, x2)`。访问成员用`.first`和`.second`,初始化和赋值方式多样。
遍历容器时,可以使用下标或迭代器。例如,对于`vector`,可以这样遍历:
```cpp
for(int i = 0; i < c.size(); i++) {
// 访问c[i]
}
```
或者使用迭代器:
```cpp
for(auto it = c.begin(); it != c.end(); it++) {
// 访问*it
}
```
在`list`中,迭代器的使用类似,只是不能进行随机访问。
以上就是C++中几种常见容器的基本操作和使用方式,理解并熟练掌握这些知识对于编写高效、灵活的C++代码至关重要。在实际编程中,选择合适的容器和正确使用它们将直接影响程序性能和可维护性。
相关推荐







白小俗
- 粉丝: 36
最新资源
- Go语言实现的Stratum(Electrum)客户端介绍
- 深圳资质申报抢号系统源码分析与学习
- Go语言实现BGP-4协议与功能拓展解析
- Docker中Fluentd镜像使用指南
- Java实现GoF设计模式示例代码解析
- Xamarin iOS集成Amplitude SDK指南
- 使用Angular和D3技术的gistdash应用展示最新Gist统计
- Planomatic:智能周计划自动创建工具
- 某焦视频app养号技巧及易语言源码解析
- PerfumeriaMarlen ERP 项目 9.1.x开发环境配置指南
- tokenCheck:利用hello.js管理与检查Google令牌
- http2dns: 突破防火墙限制的DNS端口代理服务器
- cupojoe:简化全栈环境学生测试的Docker解决方案
- Manohar Satkar开发的Java行李系统最短路径模块解析
- 掌握Java基础:SpringBoot实现SpringWebMVC与Data JPA
- 树莓派超声波模块:精确测量速度与距离
- PHP触发PhantomJS实现GST查询抓取技术
- openeye新闻聚合器:命令行运行与Python库安装指南
- ASF平台介绍:敏捷软件工厂的CICD完整工作流程
- 计算机网络期末试卷与答案合集(2011-2015)
- 芝加哥新辖区边界:2015年更新的shapefile文件
- JPA CLI:简化Java数据库查询的命令行工具介绍
- MyBatis 3.2与FreeMarker插件集成教程及应用
- Minecraft Forge模组测试教程与实践