《C++ Primer 5th》中,有说到当在vector中插入元素时,由于vector需要保持在内存中连续存储,因此,当插入之前,如果发现vector.size()=vector.capacity()时,就要进行扩容操作。
Primer书上的结果说,一般扩容会使得容量变成之前的两倍,具体根据不同坏境,标准库的实现可能会有些不同。
笔者,在VS2017+Windows10 的坏境下进行试验,发现其每次扩容并不是两倍,而是capacity变成原来容量的1.5倍。
代码如下:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> test;
decltype(test.capacity()) cap = 0; //以防相同值多次输出,初始capacity=0
for (auto i = 0; i < 100; ++i)
{
test.push_back(i);
if (test.capacity() != cap)
{
cap = test.capacity();
cout << "\t" << cap << endl;
}
}
return 0;
}
输出结果: