当前位置:网站首页>对STL容器的理解
对STL容器的理解
2022-04-23 06:24:00 【0zien0】
此文章只是对stl容器的底层实现方式以及优缺点进行一些简单的分析,并不会详细讲解容器内部相关的接口功能。 只希望知道各种容器的优缺点,在需要使用容器时选择更为合适的容器来使用。
1.array:
以线性排列的方式来存储特定类型的数据。 其实类似于普通数组,同样支持随机访问且效率高、存储大小固定,但多了一些类似迭代器访问、获取容器等高级功能。
特点:
1.容器长度固定,不能增删元素,只能改变元素的值。
2.储存空间连续,可以随机访问元素的值。
3.值无任何排序,仅根据插入容器的顺序排列。
2.vector:
和array容器有点类似,但可以扩容,所以支持增删元素。
特点:
1.支持添加和删除元素,当vector的内存空间耗尽时,会进行扩容。
2.在尾部插入和删除元素效率很高,在非尾部插入和删除元素效率很低。如:插入元素时,需要把插入元素后面的元素都往后移动一位,再插入元素。(删除同原理)
3.储存空间连续,可以随机访问元素的值。
4.值无任何排序,仅根据插入容器的顺序排列。
3.deque
和vector容器类似,但在首尾插入元素都很快捷。
1.支持添加和删除元素。
2.在首尾插入元素效率很高,在其他部位插入元素效率很低。
3.并非连续的储存空间。
4.值无序。
PS:如没大量头部插入元素需求,建议还是用vector容器比较好。
4.list
双向链表的形式,在中间插入和删除元素都非常方便快捷,但要访问中间的元素只能从头部或者尾部顺序访问。
特点:
1.插入和删除元素效率极高。
2.访问元素的值,只能通过链头链尾逐一顺序访问。
3.并非连续的储存空间。
4.值无序。
5.set
属于关联容器,通过红黑树实现值的快速查找,而且值的增删效率也非常高。
1.查找效率非常高,虽然比不上vector这种随机访问元素值的效率,但查找二叉树的值,log2的查找效率也是非常非常高的,存储的元素数量每高1倍,查找次数也只增加1次。
2.增删值同样非常高效,他不像vector这种内存连续的容器这样(增加一个元素,在其后面的元素都要往后移动),而是更像list这种链表的形式,叶子节点通过指针指向父节点,修改层级只需改动指针即可,当然,也需要通过一定的方式来旋转红黑树,最终才能完成节点的插入且保持其顺序。
3.并非连续的储存空间。
4.值有序且唯一。
6.map
属于关联容器,和set一样,实现原理也是使用红黑树,但map使用的是<key, value>这种键值对,在红黑树内部通过key来进行排序。
1.直接通过key来获取value效率还是挺高的(类似于set的原理),但如果没有key,想要查找对应的value,就只能通过遍历map了。
2.增删值的效率也非常高(类似于set的原理)
3.并非连续的存储空间。
4.key有序且唯一。
5.value无序且不唯一。
版权声明
本文为[0zien0]所创,转载请带上原文链接,感谢
https://blog.csdn.net/a42626423/article/details/124145014
边栏推荐
- Applet newline character \ nfailure problem resolution - Daily pit stepping
- Educational Codeforces Round 81 (Rated for Div. 2)
- Lead the industry trend with intelligent production! American camera intelligent video production platform unveiled at 2021 world Ultra HD Video Industry Development Conference
- ES6之箭头函数细谈
- 使用compressorjs压缩图片,优化功能,压缩所有格式的图片
- el-table的数据更新后,页面中数据未更新this.$forceUpdate()无效果
- 字节数仓实习生面试sql题
- The difference between null and undefined
- Beifeng communication helps Zhanjiang fire brigade build PDT wireless communication system
- Flexible blind patch of ad hoc network | Beifeng oil and gas field survey solution
猜你喜欢
随机推荐
菜菜的并发编程笔记 |(五)线程安全问题以及Lock解决方案
如何SQL 语句UNION实现当一个表中的一列内容为空时则取另一个表的另一列
自定义classloader并实现热部署-使用loadClass
[2020WC Day2]F.采蘑菇的克拉莉丝(子树和查询、轻重儿子思想)
USO technology was invited to share the technical framework and challenges of AI synthetic virtual characters at lvson2020 conference
数据库查询优化的方式
colab
快速傅里叶变换FFT简明教程
免费开源农业物联网云平台(Version:3.0.1)
el-date-picker中自定义快捷选项picker-options,动态设置禁用日期
后台管理系统框架,总有你想要的
Source Insight 4.0常见问题
kaggle-房价预测实战
go语言数组操作
积性函数前缀和——杜教筛
Statement of American photography technology suing Tianmu media for using volcanic engine infringement code
技能点挖坑
字节数仓实习生面试sql题
[LNOI2014]LCA——树链剖分——多点LCA深度和问题
Solution of wireless intercom system in Commercial Plaza

![[COCI]Lampice (二分+树分治+字符串哈希)](/img/7b/fe2a45d960a6d3eb7dc25200304adc.png)







