STL深入探究(二、容器的底层实现)

1 前言

上一篇 STL深入探究(一、空间配置器)我详细总结了SGI STL采用的空间配置机制,这一篇来总结一下stl容器的底层实现机制。

2 序列式容器


2.1 Vector


Vector实现方式类似于“数组”,与array的数据安排和操作方式非常类似,两者唯一的差别就在于空间运用的灵活性。
array是静态空间,一旦配置了就不能改变,要想换一个大点的空间,就必须由客户自己实现:(1)配置一块新空间;(2)将元素从旧址一一搬到新址;(3)释放原空间。
而vector是动态空间,随着元素的加入,它的内部机制会自行扩充空间以容纳新元素。

2.1.1 vector的数据结构

vector的数据结构非常简单:线性连续空间,以两个迭代器start、finish分别指向配置得来的连续空间中目前已被使用的范围,并以迭代器end_of_storage指向整块连续空间的尾部。
为了降低空间配置的速度成本,vector的实际配置大小可能会比客户端需求量更大,已备将来可能扩充。

2.1.2 vector 构造与内存管理

vector缺省使用std::alloc作为空间配置器,并另外定义了一个data_allocator为了更方便以元素大小为配置单位。
当以push_back()函数将新元素插入vector尾端,该函数首先检查是否还有备用空间,如果有就直接在备用空间上构造元素,并调整迭代器finish,使得vector变大
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值