037 - 问,vector实现原理

037 - 问,vector实现原理

所谓序列式容易,其中的元素都可序(ordered),但未必有序(sorted)。

迭代器

vector是一个连续线性空间,普通指针即可作为迭代器。

空间占用

vector实际配置的大小可能比客户端需求量更大一些。

即,容量 (capacity) >= 大小 (size)。

可见定义:

wps_clip_image-15261

容量与大小的计算方式:

wps_clip_image-17531

push_back中调用的insert_aux函数中:

037 - 问,vector实现原理_第1张图片

可知,当备用空间不足时(即capacity() - size() <= 0 ),stl会将原有空间扩大一倍( 2 * old_size ),并将原有元素复制到新的空间中(即发生空间重新配置)。

insert的算法:

wps_clip_image-6687

备用空间不足时,新长度 = 旧长度的两倍 或者 旧长度+新增元素个数。

指针有效性

对vector的任何操作,一旦引起空间重新配置,指向原vector的所有迭代器都会失效。

STL插入操作规范

插入完成后,新节点将位于哨兵迭代器所指节点的前方。

copy与copy_backward

copy

037 - 问,vector实现原理_第2张图片

把first和last之间的元素复制到result之后(感觉上的左侧)的区域上。

copy_backward

一种实现如下:

037 - 问,vector实现原理_第3张图片

把first和last之间的元素复制result之前(感觉上的右侧)的那块区域上。

你可能感兴趣的:(037 - 问,vector实现原理)