当前位置:网站首页>对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
边栏推荐
- P2257 YY的GCD(莫比乌斯反演)
- el-date-picker中自定义快捷选项picker-options,动态设置禁用日期
- 可视化之路(十二)Collection类详解
- How does the public and Private Integrated walkie talkie realize cooperative work under multi-mode communication?
- Machine vision series (02) -- tensorflow2 3 + win10 + GPU installation
- Typora操作技巧说明(一).md
- xdotool按键精灵
- Beifeng communication helps Zhanjiang fire brigade build PDT wireless communication system
- 使用el-popconfirm和el-backtop不生效
- 什么是闭包?
猜你喜欢

后台管理系统框架,总有你想要的

Tensorflow安装后ImportError: DLL load failed: 找不到指定的模块,且国内安装缓慢

SDC intelligent communication patrol management system of Nanfang investment building

jvm知识点汇总-持续更新

Discussion on the outline of short video technology

Emergency air space integrated communication system scheme of Guangxi Power Grid

不需要破解markdown编辑工具Typora

基于可视化结构的身份证号码校验系统-树莓派实现

Meishe technology launches professional video editing solution for desktop -- Meiying PC version

简单易懂的子集dp
随机推荐
学习笔记6-几种深度学习卷积神经网络的总结
华为云MVP邮件
Jiangning hospital DMR system solution
Mysql持久性的实现
[LNOI2014]LCA——树链剖分——多点LCA深度和问题
Intelligent communication solution of Hainan Phoenix Airport
(一)OpenPAI jupyter jupyterhub jupyterlab 方案比较
使用el-popconfirm和el-backtop不生效
记录一下使用v-print中遇到的问题
LATEX公式注意事项
golang实现MD5,SHA256,bcrypt加密
Emergency medical communication solution | mesh wireless ad hoc network system
浅谈BFC(块格式化上下文)
Discussion on arrow function of ES6
什么是闭包?
[ACM-ICPC 2018 沈阳赛区网络预赛] J.Ka Chang (分块+dfs序)
两个线程交互打印奇偶数字
PyTorch 20. Pytorch tips (continuously updated)
C语言的指针符号到底靠近变量类型还是变量名?
数论分块(整除分块)