vector
start
和finish
指向范围,end_of_storage
指向尾端
push_back()
:
检查是否有备用空间,如果有就构造元素,调整迭代器finish
,如果不够,就扩充空间(重新配置、移动数据、释放原空间)
pos_back()
:将尾端元素拿掉
erase(first,last)
:
清除区间内不包括(last
)的数据,原理是先把后面复制到前面,然后删除后面。
clear
:用erase
实现。
insert
:在指定位置前插入元素,原理是把后面的数据移动到插入后的后面位置,然后插入。(实际操作稍微复杂点,以后再补)
高效的随机存取,但插入删除较慢。
list
环形双向链表:
空白节点表示end()
,下一个节点就是begin()
vector
的迭代器是普通指针,但是list
的指针不再是普通指针,因为它的空间并不是连续的。
push_front()/back()
pop_front()/back()
clear
,清空
remove
移除值为x
的数。
unique
删除连续相同的元素。
transfer
将[first,last)
的元素移动到pos
之前。(不是公开接口)
splice
将连续范围的元素,从一个list
移动到另一个list
。
排序使用了归并排序。
低效的存取,但是插入删除很快
deque
动态地以分段连续空间组合而成,维护整体连续的假象,并提供随机存取的接口
deque
使用一小段连续空间map
作为主控 ,map
不够大的时候会,就必须配置新的更大的。
如何实现随机存取,首先根据大小算出在map
上的步长,然后走到具体位置之后,在连续空间里直接O(1)
存取。