C++ vector对象是如何增长的,VS2017下的1.5倍增长

    xiaoxiao2022-07-05  154

    《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; }

    输出结果:

     

    最新回复(0)