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/