C++容器list、vector、map、set全面解析与应用
版权申诉
133 浏览量
更新于2024-09-14
3
收藏 95KB PDF 举报
n"个elem元素的拷贝。list
list是以双向链表的形式实现的,不支持随机访问,但允许在任何位置高效地插入和删除元素。它使用迭代器进行访问,通过迭代器可以向前或向后遍历列表。创建list时,不需要预先指定大小。
list对象的创建
list<数据类型>list容器名称;
list<int>lstInt; // 一个存放int的list容器
list<char>lstChar; // 一个存放char的list容器
list常用操作
list.size(); // 返回容器中元素的个数
list.empty(); // 判断容器是否为空
list.push_back(1); // 在容器尾部添加一个元素
list.push_front(2); // 在容器头部添加一个元素
list.pop_back(); // 移除容器尾部的一个元素
list.pop_front(); // 移除容器头部的一个元素
list.clear(); // 清空容器的所有数据
list.erase(iter); // 删除迭代器iter指向的元素
list.splice(iter, lst2, beg, end); // 从lst2的[beg, end)区间剪切元素并插入到iter位置
list.reverse(); // 反转容器中的元素顺序
map
map是一个关联容器,它存储键值对<key, value>,其中key是唯一的。它使用红黑树实现,提供O(log n)的插入和查找效率。map的元素不能被直接索引,但可以通过键来查找对应的值。
map对象的创建
map<键类型, 值类型>map容器名称;
map<int, string>mymap; // 创建一个键为int,值为string的map
map常用操作
map.size(); // 返回容器中元素的个数
map.empty(); // 判断容器是否为空
map.insert(pair<键类型, 值类型>(k, v)); // 插入一个键值对
map[k]; // 通过键k查找对应的值,如果不存在则自动插入并返回默认值
map.erase(k); // 删除键为k的键值对
map.find(k); // 查找键为k的迭代器,若找不到则返回end()
set
set也是关联容器,类似于map,但它只存储键而不存储值,键必须是唯一的。set同样基于红黑树,提供O(log n)的插入和查找效率。
set对象的创建
set<数据类型>set容器名称;
set<int>myset; // 创建一个存储int的set
set常用操作
set.size(); // 返回容器中元素的个数
set.empty(); // 判断容器是否为空
set.insert(k); // 插入一个元素k
set.erase(k); // 删除元素k
set.find(k); // 查找元素k的迭代器,若找不到则返回end()
Hash
虽然没有直接提及哈希表,但在C++11中引入了unordered_map和unordered_set,它们使用哈希表实现,提供了更快的查找速度(平均O(1)),但可能因为哈希冲突而牺牲一定的性能。
unordered_map对象的创建
unordered_map<键类型, 值类型>umap容器名称;
unordered_map<int, string>umymap; // 创建一个键为int,值为string的unordered_map
unordered_set对象的创建
unordered_set<数据类型>uset容器名称;
unordered_set<int>myuset; // 创建一个存储int的unordered_set
总结:
C++中的容器list、vector、map和set分别提供了不同的数据结构和操作特性,适应不同的应用场景。list适合频繁插入和删除的操作;vector适用于快速随机访问;map和set则用于键值对的关联存储,其中set只存储键。根据实际需求选择合适的容器能显著提高代码效率。
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
点击了解资源详情
weixin_38747211
- 粉丝: 12
- 资源: 901
最新资源
- 正整数数组验证库:确保值符合正整数规则
- 系统移植工具集:镜像、工具链及其他必备软件包
- 掌握JavaScript加密技术:客户端加密核心要点
- AWS环境下Java应用的构建与优化指南
- Grav插件动态调整上传图像大小提高性能
- InversifyJS示例应用:演示OOP与依赖注入
- Laravel与Workerman构建PHP WebSocket即时通讯解决方案
- 前端开发利器:SPRjs快速粘合JavaScript文件脚本
- Windows平台RNNoise演示及编译方法说明
- GitHub Action实现站点自动化部署到网格环境
- Delphi实现磁盘容量检测与柱状图展示
- 亲测可用的简易微信抽奖小程序源码分享
- 如何利用JD抢单助手提升秒杀成功率
- 快速部署WordPress:使用Docker和generator-docker-wordpress
- 探索多功能计算器:日志记录与数据转换能力
- WearableSensing: 使用Java连接Zephyr Bioharness数据到服务器