🚃vector - 向量
STL中vector类的详细介绍
vector 容器基本概念
vector的数据安排及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。
array是静态空间,一旦配置了一般不能改变,如果要改变空间大小,需要自行完成以下三个步骤:
配置一块新的空间
将旧数据搬往新的空间
释放原来的空间
而vector是动态空间,但其实vector的动态也是对于上述过程的封装,并且vector配置空间的策略也考虑了运行成本,采用特定的扩展的策略(并不是简单的成倍扩展)。

vector 迭代器
vector维护一个线性空间,所以不论元素类型如何,普通指针都可以作为vector的迭代器。
因为vector迭代器所需要的行为,如
operator*,operator->,operator++,operator--,operator+,operator-,operator+=,operator-=,普通指针天生具备。vector指针支持随机存取,而普通指针正有着这样的能力。
所以,vector提供的是随机访问迭代器(Random Access Iterator),其内部用普通指针实现。
使用迭代器进行正序遍历
使用迭代器逆序遍历
判断迭代器是否能随机访问的方法
用多了自然就背上了,下面给出一种现场测试的方法。
vector 数据结构
vector采用的数据结构非常简单,线性连续空间,它以两个迭代器_Myfirst和_Mylast分别指向配置得来的连续空间中已被使用的范围,并以迭代器Myend指向整块连续内存空间的尾端。
为了降低空间配置时的成本,vector实际配置的大小可能比用户端需求大一些,以备将来可能的扩充,这便是容量的概念。
一个vector容器的容量永远大于等于其大小,一旦容量等于大小,便是满载,下次再有新增元素,整个vector容器就得另觅居所。
所谓动态增加大小,并不是在原空间之后续接新空间(因为无法保证原空间之后尚有可配置的空间),而是一块更大的内存空间,然后将原数据拷贝新空间,并释放原空间。
因此,对vector的任何操作,一旦引起空间的重新配置,指向原vector的所有迭代器就都失效了。
vector常用API操作
API = Applicational Programming Interface
vector 构造函数
下面对于第二种构造方式给出一个特殊的例子:
vector 常用赋值操作
由于vector采用模版类实现,其完整的函数声明会稍显复杂,下面方法的演示会省略类型界定。
互换操作也可视为一种特殊的赋值:
巧用
swap来收缩空间:
vector 大小操作
vector 数据存取操作
vector插入和删除操作
至此,读者应当对vector的特点及基本操作有了较为全面的认识,使用时API记不清可以回头多看。
最后更新于
这有帮助吗?