看过《STL源码剖析》可以知道vector空间的自动分配策略是空间加倍。
由于stl的版本比较多,针对常用的两个做下检测,vs2012与gcc 5.3.0
size():获取当前使用大小
capacity():获取当前容器大小
分配100万次检测一下。
代码
#include <vector>
#include <iostream>
void VectorTest()
{
std::vector<int> vTest;
for (int i = 0; i < 1000000; ++i)
{
vTest.push_back(1);
int nSize = vTest.size();
int nCapacity = vTest.capacity();
if (nSize == nCapacity)
{
std::cout<<nSize<<"\t"<<nCapacity<<std::endl;
}
}
std::cout<<std::endl;
};
实验结果:
vs2012 每次新增当前空间的1/2
g++ 5.3.0每次新增当前空间大小,亦即是倍增的