🚃vector - 向量

STL中vector类的详细介绍

vector 容器基本概念

vector的数据安排及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。

array是静态空间,一旦配置了一般不能改变,如果要改变空间大小,需要自行完成以下三个步骤:

  • 配置一块新的空间

  • 将旧数据搬往新的空间

  • 释放原来的空间

vector是动态空间,但其实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常用API操作

API = Applicational Programming Interface

vector 构造函数

下面对于第二种构造方式给出一个特殊的例子:

vector 常用赋值操作

由于vector采用模版类实现,其完整的函数声明会稍显复杂,下面方法的演示会省略类型界定。

互换操作也可视为一种特殊的赋值:

巧用swap来收缩空间:

vector 大小操作

vector 数据存取操作

vector插入和删除操作

最后更新于

这有帮助吗?