3

我知道在 std::vector 中,每次空间用完时大小都会增加。然而,我没有注意到它的增长模式。有人可以向我解释一下这种模式以及为什么选择它。

#include <iostream>
using namespace std;

#include <iostream>
#include <vector>
int main()
{
    vector<int> myVector;
    for(int i =0 ; i < 100; ++i)
    {
        myVector.push_back(i);
        cout << myVector.capacity();
    cout << ", ";
    }
}

结果:

1, 2, 3, 4, 6, 6, 9, 9, 9, 13, 13, 13, 13, 19, 19, 19, 19, 19, 19, 28, 28, 28, 2
8, 28, 28, 28, 28, 28, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 42, 6
3, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 6
3, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 9
4, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 94, 141, 141, 141, 141, 141, 141
4

2 回答 2

4

这取决于实现,因此在切换操作系统、编译器等时不要期望相同的模式。

最常见的增长模式是1.5 * previous_capacity2 * previous_capacity。在您的示例中,似乎是前者。

有关为什么选择该因素的可能解释,请参阅https://stackoverflow.com/a/1100426/784668 。关键是它显然允许重用以前用于存储数组的空闲内存块。

于 2012-09-01T16:06:58.930 回答
1

这是一个实现细节,你不应该关心它。在您的情况下,它似乎类似于

i += i/2

但更复杂一些。

于 2012-09-01T16:08:16.637 回答