从教程中,知道了当我们增加Vector中的容量时,Vector的首地址会发生变化,导致迭代器出现错误。
因此产生一个疑问,就是push_back(),这个函数是往Vector中添加元素,当容量不够时,会自动添加容量。但push_back()是在末尾添加的,所以这个函数导致的容量增加会改变首地址吗?
因此,通过下面的代码来进行验证。
#include <iostream>
#include<vector>
using namespace std;
int main()
{ vector<int> values;
for(int i=0;i<10;i++)
{
values.push_back(1);
cout<<values.capacity()<<endl;
cout<<"address:"<<values.data()<<endl;
}
cout<<values.capacity()<<endl;
return 0;
}
capacity()是容量,data()是首地址的指针。
输出如下:
由上可知,Vector 当容量不够时,每次增加容量都会直接申请一倍的容量,这便是Vector为何不能代替数组的原因。
此外,push_back()引起的容量增加也会导致首地址变化,需要注意。