首先创造一个容器vector <int > a;
,会生成三个指针,first,last,end。(last是不断移动的),初始化一个空的容器,三个指针均为空,因此capacity(end-first)和size(last-first)都为0。
(size是当前vector容器真实占用的大小,也就是容器当前拥有多少个元素。capacity是指预分配的内存空间。)
capacity==size,容器此时已满,若再要加入新的元素时,就要重新进行内存分配,进行内存扩充。
vector 容器扩容的过程需要经历以下 3 步:
1. 完全弃用现有的内存空间,重新申请更大的内存空间;
2.将旧内存空间中的数据,按原有顺序移动到新的内存空间中;
3. 最后将旧的内存空间释放。
因为所有的vector是顺序存储的,在后面push_back一个新的元素超过容器的capacity时,会开辟一个新的更大的内存空间(不一定是2倍),开辟多大的内存空间与windows,linux,编译器有关。开辟了新的连续的内存空间后,会将之前整体存放到新的内存空间中。
例如VS中,扩充是之前的百分之50(win)
在linux中,扩充是之前的2倍。