STL源码解析 Vector
vector
定义
单向开口的连续线性空间
动态数组
迭代器:
普通指针
数据结构
vector的数据结构 是 线性连续空间
三个迭代器
start
finish
end_of_storage
构造和内存管理
构造时指定空间大小
构造时指定空间大小,则空间的finish和end_of_storage 是相同的,即空间大小是指定的大小,不多分配空间。
空间配置器alloc
vector默认是alloc 为默认的空间配置器
且定义了data_alocator
uninitialized_fill_n()与fill_n()的区别
- fill_n() 指的是 对每个元素填充value
- uninitialized_fill_n() 是对未初始化空间(空间还没对象)填充,
uninitialized_fill_n()先判断value的类型,类型若是POD,则调用fill_n()高阶函数填充;若不是POD类型,则遍历构造
POD
push_bask()元素
-
finish < end_of_storage
备用空间插入元素 -
finish == end_of_storage
若原空间大小为0,则分配1;若原空间大小不为0,则分配2倍
拷贝元素
析构并释放原空间 destory() 和 deallocate()
将原来迭代器指向新的位置
erase() 清楚元素
将erase()的元素后面往前拷贝,释放erase的元素个数大小
insert()
-
备用空间 > 新插元素个数
- 新增元素个数 < 插入点后的元素个数
copy插入点到finish的元素 - 新增元素个数 > 插入点后的元素个数
调整finish的位置
copy插入点到 旧finish 的元素 ,到 新 finish的位置
- 新增元素个数 < 插入点后的元素个数
-
备用空间 小于 新增元素个数
分配一块更大的空间,
【分配多大?】 一般是2倍,若2倍不够用 ,就分配【原个数+新增个数】
拷贝过去,析构和释放原空间

浙公网安备 33010602011771号