STL底层原理简介
来源:互联网 发布:哪个看书软件全部免费 编辑:程序博客网 时间:2024/05/15 06:26
sort
STL的sort()算法,数据量大时采用Quick Sort,分段递归排序。一旦分段后的数据量小于某个阈值,为避免Quick Sort的递归调用带来过大的额外开销,就改用Insertion Sort(插入排序)。如果递归层次过深,也就是说数据量过大,比如说有10亿个数,还会改用Heap Sort。
vector
底层数据结构为数组 ,变长,支持快速随机访问
array
底层数据结构为数组,定长,支持快速访问
deque(双向队列)
双端队列的数据被表示为一个分段数组,容器中的元素分段存放在一个个大小固定的数组中,此外容器还需要维护一个存放这些数组首地址的索引数组
由于分段数组的大小是固定的,并且它们的首地址被连续存放在索引数组中,因此可以对其进行随机访问,但效率比vector低很多。
向两端加入新元素时,如果这一端的分段数组未满,则可以直接加入,如果这一端的分段数组已满,只需创建新的分段数组,并把该分段数组的地址加入到索引数组中即可。无论哪种情况都不需要对已有元素进行移动,因此在双端队列的两端加入新的元素都具有较高的效率。
当删除双端队列容器两端的元素时,由于不需要发生元素的移动,效率也是非常高的。
双端队列中间插入元素时,需要将插入点到某一端之间的所有元素向容器的这一端移动,因此向中间插入元素的效率较低,而且往往插入位置越靠近中间,效率越低。删除队列中元素时,情况也类似,由于被删除元素到某一端之间的所有元素都要向中间移动,删除的位置越靠近中间,效率越低。
queue
队列,使用list或deque实现,封闭一端即可,不用vector的原因应该是容量大小有限制,扩容耗时
stack
栈,使用list或者deque实现,封闭一端即可
forward_list
单向链表,底层数据结构为链表
list
双向链表,底层数据结构为链表
set
底层数据结构为红黑树(一种二叉查找树,2-3树改进而来),有序,不重复
multiset
底层数据结构为红黑树,有序,可重复
map
底层数据结构为红黑树,有序,不重复
multimap
底层数据结构为红黑树,有序,可重复
- iterator 只有vector和array这种支持快速随机访问的容器支持iterator+n的这种运算,其他的容器可以使用std:advance(iterator,n)
http://www.cplusplus.com/reference/iterator/advance/
- STL底层原理简介
- STL实现的底层数据结构简介
- STL实现的底层数据结构简介
- STL实现的底层数据结构简介
- STL实现的底层数据结构简介
- STL实现的底层数据结构简介
- STL实现的底层数据结构简介
- STL实现的底层数据结构简介
- STL实现的底层数据结构简介
- STL中容器的底层实现原理
- Linux设备模型(底层原理简介)
- Linux设备模型(底层原理简介)
- PHP底层原理之php hash简介
- Neo4j图数据库简介和底层原理
- CPP(十一):STL实现的底层数据结构简介
- Linux设备模型,底层原理简介-[Kobject、Kset 和 Subsystem]
- STL hash_map 底层初探
- STL 底层数据结构
- sed 增删查改
- 17年9月Java面试第二站
- android 优秀源码
- HTTP协议报文结构
- mysql某个数据库的所有表以及表中列的注释
- STL底层原理简介
- Qss样式读取
- sorl 相关
- eclipse下不能编译.ftl文件,会报错的解决方法
- java.util.Random 实现原理
- Allegro PCB gerber快速生成光绘文件。
- vector, list, deque的区别
- java数据结构和算法
- 【Android】getLeft(),getRight()值为0,应在何时正确获取他们的值