STL容器

vector

startfinish指向范围,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)存取。

你可能感兴趣的:(C++)