STL(9) vector

发布时间 2023-09-12 01:34:29作者: LiviaYu

动态增长的数组

底层

数组,支持动态扩充
在某一个点上,需要在内存的别的地方找到空间,进行扩充

扩充方式,当到达了一个阈值,在内存中找到另一个空间,进行成倍增长

sizeof vector为12

内部有三根指针,start end end_of_storage

两倍增长的原理

如果finish和end不等,说明capacity还没满,直接插入

如果相等了
就要重新分配

再重新分配中,再次检查了finish和end是否相等 为什么?

因为这个insert aux函数同时被其他的调用了

两倍成长,之后,先进行拷贝,再插入新的元素,最后将后序的元素拷贝过来(同理,因为insert也调用了此函数,所以需要将后面的拷贝过来)

vector的iterator

因为是连续空间,所以不用设计的和list的迭代器一样写成一个class,用指针就可以了

而接收到该萃取的时候,萃取机接收到 T*的类型,走入偏特化的类型

gnu c 4.9

sizeof仍然是12 还是三个指针

这里的public继承没道理,因为public代表着一种is a的关系

这里impl只是要用到allcator的一种功能,所以应该用private继承