先上结论:vector扩容和编译器有关,一般是原容量的1.5或者2倍,通过下面的代码测试
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> vec;
size_t cap = vec.capacity();
for (int i = 0; i < 10000; i++)
{
vec.push_back(i);
if (cap != vec.capacity())
{
cap = vec.capacity();
cout << "capacity: " << vec.capacity() << " size: " << vec.size() <<" vec[0]:" << &vec[0]<< endl;
}
}
return 0;
}
通过以上代码查看vector的扩容机制,以下为Windows上eclipse+cygwin开发环境下的运行结果:
可以看到在这个环境上vector是按照2倍原容量大小进行扩容的。
同一样的代码在vs2008上的运行结果如下:
可以看到在这个环境上vector是按照1.5倍原容量大小进行扩容的。