037 - 问,vector实现原理
所谓序列式容易,其中的元素都可序(ordered),但未必有序(sorted)。
迭代器
vector是一个连续线性空间,普通指针即可作为迭代器。
空间占用
vector实际配置的大小可能比客户端需求量更大一些。
即,容量 (capacity) >= 大小 (size)。
可见定义:
容量与大小的计算方式:
push_back中调用的insert_aux函数中:
可知,当备用空间不足时(即capacity() - size() <= 0 ),stl会将原有空间扩大一倍( 2 * old_size ),并将原有元素复制到新的空间中(即发生空间重新配置)。
insert的算法:
备用空间不足时,新长度 = 旧长度的两倍 或者 旧长度+新增元素个数。
指针有效性
对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器都会失效。
STL插入操作规范
插入完成后,新节点将位于哨兵迭代器所指节点的前方。
copy与copy_backward
copy
把first和last之间的元素复制到result之后(感觉上的左侧)的区域上。
copy_backward
一种实现如下:
把first和last之间的元素复制result之前(感觉上的右侧)的那块区域上。