STL之Vector
vector模塑出一个动态数组,但是C++标准中并为要求以动态数组来实现vector。

vector是一种有序集合,可以随机访问,提供随机访问迭代器
在末端添加或删除元素,vector的效率就非常好;但在前端删除或插入元素的效率就非常低
vector优异效率的秘诀就是分配出“较其容纳元素” 的更多内存
vector的容量为什么重要

vector的容量一旦超过capacity,就需要重新分配内存
vector不能使用reserve()缩减容量,即reserve()所给的容量小于vector的当前容量,则不会引发任何效果,这与string的reserve()有很大区别
C++11引入了一个新的vector函数:一个不具强制力的要求,可以缩减容量符合当前元素个数 \(shrink\_to\_fit\)
vector的构造函数

操作函数

赋值就是 将新元素赋值给vector,并将旧元素移除的方法

元素访问

插入和删除
插入和删除元素时必须保证传入的参数合法包括 1. 迭代器必须指向一个合法位置 2. 区间的起始位置不能在结束位置之后。

调用pop_back时,确保容器不空是程序员的职责
下列情况可以预期插入和删除动作快一些
在容器尾部插入或者删除
容量一开始就大
插入多个元素时,调用一次比调用多次来得快
vector并未提供与某值相等的删除函数

注意 \(resize\) 和 \(reserve\) 的区别, \(resize\) 是更改 \(size\) 而 \(reserve\) 是更改 \(capacity\)
移除与某值相等的第一个元素
将 \(vector\) 当作 \(C-style\) 数组使用
千万不要把迭代器当作"第一元素的地址"来传递

class<vector>bool 是vector<>的特化版本,目的是为了获取一个优化的vector,目的是获取一个优化的vector,使其耗用空间远小于一般vector实现出来。一般实现版本会为每个bool元素分配至少1byte空间,而vector 版本内部只使用1bit存放一个元素,空间节省8倍。不过有个小麻烦:C++的最小可定址值是以byte为单位,所以上述的vector特化版必须对reference和iterator做特殊处理。