Vector概述
vector是STL中最常用的容器,vector主要功能是作动态数组来弥补传统数组的缺点,如:不灵活,不方便插入等等。
Vector支持随机访问,因此访问某一个元素的时间复杂度是O(1)。
vector中存储着许多易用的函数方法,方便使用。
Vector底层
本质
vector容器在底层是泛型的动态顺序表,是一段连续的内存空间,同时其本质是一个模板,因此可以存储不同数据类型的元素。
vector有三个基本的指针,分别是start,finish,end_of_storage;
其分别指向容器的
首元素,
尾元素的下一个位置,
以及容器的最大位置。
靠着这三个指针,vector实现了许多的功能的函数与方法,如已存储元素大小,剩余空间大小,总容器空间大小等等。
而容器的迭代器iterator是传入的数据类型的指针别名
扩容机制
作为一个动态容器,vector有扩容功能。vector的size(),和capacity()方法分别记录着vector的元素数量和总容器空间大小。那么当存储的size()增大超过capacity()时,vector就会进行扩容操作。以Linux为代表的扩容大小一般为2倍。
vector扩容分为三步:
1.完全弃用现有的内存空间,重新申请更大的内存空间
2.将旧容器空间内的元素按顺序存储的方式存入新容器空间
3.释放旧容器空间内存
需要注意的是,扩容机制时间成本很高,所以如果提前能确定容器空间的大小最好提前设定好容器空间的大小,来避免扩容。而且因为使用了全新的内存空间,原有的指针,迭代器可能会失效。