C++ STL 容器简介
1、总述
C++ STL(Standard Template Library)是 C++ 标准库的一部分,包括了许多数据结构的实现,提供了许多好用的轮子,同时,其设计思想也非常值得学习。其中,容器是 STL 中最重要的一部分,它是一种高效的数据存储和管理方式,能够方便地处理不同类型的数据,并提供许多常用的操作,如插入、删除、查找等。
2、容器分类
C++ STL 容器分为两大类:序列型容器和关联型容器。
2.1 序列型容器
序列型容器包括 vector、list、deque 等,它们都是基于数组或链表实现的,能够处理连续或非连续的内存。
vector:vector 是一种动态数组容器,它能够自动分配空间,支持随机访问和顺序访问。vector 适用于对大小进行频繁变动的容器,如存储动态数据等。
list:list 是一种双端链表容器,它不进行内存分配,支持随机访问和顺序访问。list 适用于对元素进行频繁添加、删除和遍历等操作。
deque:deque 是一种双端队列容器,它能够自动分配空间,并支持随机访问和顺序访问。deque 适用于对首元素进行频繁添加、删除和遍历等操作。
2.2 关联型容器
关联型容器是 C++ STL 中另一种重要的容器,它们以关键字(key)为索引,存储一组有序的键值对(key-valuepair),并提供了快速的查找、插入和删除等操作。关联容器包括以下几种:
map:map 是一种基于红黑树实现的关联容器,它以 key 为索引,存储一组有序的键值对。map 适用于需要根据 key 进行查找、插入和删除等操作的场景。
multimap:multimap 是一种基于红黑树实现的关联容器,它以 key 为索引,存储多组有序的键值对。multimap 适用于需要根据 key 进行查找、插入和删除等多组数据的场景。
set:set 是一种基于哈希表实现的关联容器,它以 key 为索引,存储一组唯一的键值对。set 适用于需要根据 key 进行查找、插入和删除等操作的场景。
multiset:multiset 是一种基于哈希表实现的关联容器,它以 key 为索引,存储多组唯一的键值对。multiset 适用于需要根据 key 进行查找、插入和删除等多组数据的场景。
3、容器的优缺点
C++容器具有许多优点,如动态分配空间、访问高效、支持随机访问等。然而,它也有一些缺点:
资源消耗:容器需要额外的空间来存储元数据(如大小、容量等),这可能会导致额外的内存消耗。
性能损失:部分容器操作可能涉及额外的计算,如哈希表的哈希函数、红黑树的旋转操作等,这可能会影响性能。
通用性限制:部分容器可能只能存储特定类型的数据,如向量只能存储对象,不能存储函数指针等。
4、总结
容器是 C++ STL 中非常重要的一部分,能够方便地处理不同类型的数据,并提供许多常用的操作,如插入、删除、查找等。其中,序列型容器和关联型容器是容器的两大类,分别适用于不同的场景。掌握容器的原理、使用场景和方法,能够提高程序开发的效率和代码可读性,对于开发工作有很大的好处。
C++ STL 容器简介的更多相关文章
- STL 容器简介
一.概述 STL 对定义的通用容器分三类:顺序性容器.关联式容器和容器适配器. 顺序性容器是一种各元素之间有顺序关系的线性表.元素在顺序容器中保存元素置入容器时的逻辑顺序,除非用删除或插入的操作改变这 ...
- STL容器简介
stl不是面向对象的编程,而是一种不同的编程模式————泛型编程 我们常用到的STL容器有vector.list.deque.map.multimap.set.multiset 顺序性容器:vecto ...
- STL容器及算法题:删除奇数的QQ号
最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...
- STL的简介
Standard Template Library,(标准模板库)<来自百度百科的整理> ————可复用性(reusability) STL是基于模板,内联函数的使用使得生成的代码短小高效 ...
- STL map 简介
STL map 简介 转载于:http://www.cnblogs.com/TianFang/archive/2006/12/30/607859.html 1.目录 map简介 map的功能 使用ma ...
- STL容器
啦啦啦,今天听啦高年级学长讲的STL容器啦,发现有好多东西还是有必要记载的,毕竟学长是身经百战的,他在参加各种比赛的时候积累的经验可不是一天两天就能学来的,那个可是炒鸡有价值的啊,啊啊啊啊啊 #inc ...
- c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例
c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...
- STL容器删除元素的陷阱
今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...
- 【转】c++中Vector等STL容器的自定义排序
如果要自己定义STL容器的元素类最好满足STL容器对元素的要求 必须要求: 1.Copy构造函数 2.赋值=操作符 3.能够销毁对象的析构函数 另外: 1. ...
- GDB打印STL容器内容
GDB调试不能打印stl容器内容,下载此文件,将之保存为~/.gdbinit就可以使用打印命令了. 打印list用plist命令,打印vector用pvector,依此类推. (gdb) pvecto ...
随机推荐
- WPF使用Grid布局
WPF布局 WPF布局基础 布局原则 一个窗口中只能包含一个元素 不应显示设置元素尺寸 不应使用坐标设置元素的位置 可以嵌套布局容器 布局容器 StackPanel: 水平或垂直排列元素.Orient ...
- C#/.NET/.NET Core技术前沿周刊 | 第 2 期(2024年8.19-8.25)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- 常用 DNS 查询速度测试
测试工具 DNS-Benchmark | GitHub 总结 进过多轮测试,我认为: 223.5.5.5 和 223.6.6.6 平均响应时间最短(223.5.5.5 在教育网内疑似无法连通) 114 ...
- C语言三子棋
话说自从大一学C语言后用C语言的巅峰也就是第十二届蓝桥杯了,后续开发什么的都是用的java,搞开发java这样的面向对象语言确实用着更顺手方便点.不过C语言YYDS,"C生万物"嘛 ...
- Comfyui 基础教程(一) —— 本地安装部署
前言 前面一篇文章已经介绍过,ComfyUI 和 Stable Diffusion 的关系.不清楚的朋友,看传送门 Stable Diffusion 小白的入坑铺垫 . WebUI 以及 ComfyU ...
- element plus 2.3.14(完成 指南 部分)
https://element-plus.org/zh-CN/guide/design.html 设计 控制反馈: 通过界面样式和交互动效让用户可以清晰的感知自己的操作: 页面反馈: 操作后,通过页面 ...
- 第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载
文件上传下载-解决无图形化&解决数据传输 命令生成:https://forum.ywhack.com/bountytips.php?download 反弹shell 以参照物为准,以Linux ...
- LeetCode 1316. Distinct Echo Substrings (RK哈希)
题意: 给一个字符串 寻找字符串为(a+a)格式的子串有多少.a+a 格式字符串比如 abcabc, ee 等. 首先O(N^2)枚举子串,然后通过哈希在O(1)复杂度判断子串是否符合要求. RK哈希 ...
- 分类问题的评价指标AUC
- 数据库故障处理优质文章汇总(含Oracle、MySQL、MogDB等)
数据库告警.紧急问题处理这些项目对于大多数朋友来讲应该不陌生了.从墨天轮社区整理的"最受DBA欢迎的技术文档合辑"系列中可以发现,大家对"故障诊断专题"的热情居 ...