《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;
}
输出结果:

C++ vector扩容机制在VS2017的试验
《C++ Primer 5th》提到vector插入元素时,若size等于capacity会扩容,一般扩容为之前两倍,但不同环境标准库实现有差异。笔者在VS2017+Windows10环境试验发现,其每次扩容capacity变为原来的1.5倍,并给出了代码及输出结果。
373

被折叠的 条评论
为什么被折叠?



