vector的数据格式与array非常相似,两者的差别在于空间的灵活运用,array是静态空间,一旦配置内存空间就不容易更改原来的空间大小。而vector是动态空间,随着元素的加入,它的内部机制就会自动扩容以容纳新元素的加入。
vector的实现技术,关键在于对大小的控制以及重新配置时数据移动的效率。如果每增加一个元素,其空间只增大一个是十分不明智的选择,因为对于配置空间、数据移动、释放旧空间时间成本都是高的,下面文章内容中就会讲解它扩容的具体机制。
使用vector应包括头文件,但是SGI将vector的实现代码写在了更底层的<stl_vector.h>
vector维护的是一个连续性的空间
即创建vector容器是什么类型的,其迭代器就是什么类型,比如vector::inerator iv;
iv的类型就是int。
一般为了降低空间配置时的时间成本,vector的实际配置大小可能比客户端需求量更大一些,以备将来可能的扩充,这便是容量的概念。
将容量扩大为当前容量的两倍可以更好地平衡内存使用和性能。(配置器中内存池的扩容)
ps:动态增加大小,并不是在原空间之后接续新空间(因为无法保证在原空间后面还有可供提供的内存空间),而是以原大小空间的两倍在配置一个空间,将原内容拷贝过来,并释放掉原来的内存空间。因此空间重新配置后,原本的迭代器就失效了(原来指向的空间释放掉了)。