概述:主要阐述了STL中vector容器的底层实现原理
vector底层实现原理
存储结构:
vector : STL中的向量容器,其底层是一段连续的线性空间(数组)
里面封装了三个指针,分别指向不同的位置
源码:
template <class _Ty, class _Alloc = allocator<_Ty>>
class vector{
...
protected:
pointer _Myfirst;//_Myfirst指向的是vector 容器对象的起始字节位置
pointer _Mylast;//_Mylast指向当前最后一个元素的末尾字节
pointer _Myend;//_Myend指向整个 vector 容器所占用内存空间的末尾字节
};
空的 vector 容器,由于没有任何元素的空间分配,因此 _Myfirst、_Mylast 和 _Myend 均为 null
通过灵活运用这 3 个迭代器,vector 容器可以轻松的实现诸如首尾标识、大小、容器、空容器判断等几乎所有的功能
支持尾部增删元素,支持指定位置插入元素
vector有capacity()和size()函数,区分容量和大小
vector容器的大小不能超过它的容量,在容器大小等于容量时,只要再增加一个元素,就会分配更多的内存,所谓vector容器扩容。
vector扩容分三步
1 先申请更大的内存空间
2 将旧内存空间中的数据,按顺序移动到新的内存空间
3 最后释放旧内存空间
vector扩容后,可能导致迭代器失效。因为新的内存空间是新的地址
注释:
上述资料为个人学习总结笔记,学习资源来自 c语言中文网