当前位置:网站首页>对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
边栏推荐
- Mysql的存储引擎
- 数据库查询优化的方式
- Object.create()原理,Object.create()规范,手写Object.create(),Object.create()用法
- (一)OpenPAI jupyter jupyterhub jupyterlab 方案比较
- Discussion on the outline of short video technology
- Tensorflow安装后ImportError: DLL load failed: 找不到指定的模块,且国内安装缓慢
- kaggle-房价预测实战
- pytorch:关于GradReverseLayer实现的一个坑
- Us photo cloud editing helps BiliBili upgrade its experience
- van-uploader上传图片实现过程、使用原生input实现上传图片
猜你喜欢
H5 case development
可视化常见问题解决方案(八)数学公式
Solution of self Networking Wireless Communication intercom system in Beifeng oil and gas field
可视化常见绘图(五)散点图
Beifeng communication helps Zhanjiang fire brigade build PDT wireless communication system
记录一些npm 有关的问题(杂乱记录)
jvm知识点汇总-持续更新
Discussion on frame construction and technology selection of short video platform
快速下载vscode的方法
Mysql 数据库从设计上的优化
随机推荐
记录阿里云服务器挖矿程序处理
数论之拓展欧几里得
记录一下使用v-print中遇到的问题
Meishe technology launches professional video editing solution for desktop -- Meiying PC version
菜菜的并发编程笔记 |(五)线程安全问题以及Lock解决方案
Jiangning hospital DMR system solution
理解补码的要点
关于'enum'枚举类型以及结构体的问题。
javscript获取文件真实后缀名
数据分析入门 | kaggle泰坦尼克任务(三)—>探索数据分析
PyTorch 13. Nested functions and closures (dog head)
How does the public and Private Integrated walkie talkie realize cooperative work under multi-mode communication?
Object. Create() principle, object Create() specification, handwritten object create(),Object. Create() usage
The difference between null and undefined
(一)OpenPAI jupyter jupyterhub jupyterlab 方案比较
xdotool按键精灵
快速下载vscode的方法
保洁阿姨都能看懂的中国剩余定理和扩展中国剩余定理
启动mqbroker.cmd失败解决方法
manjaro安装与配置(vscode,微信,美化,输入法)