【发布时间】:2012-09-01 16:04:20
【问题描述】:
我知道在 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
【问题讨论】:
-
它高度依赖编译器,但我在某处读到(虽然忘记了源代码)它在某些实现中增长了 2 倍
-
这不是标准化的,所以取决于实现。你不能依赖任何模式。
-
您通常可以依靠这样一个事实,即当容量增加时,它将是
new_capacity = old_capacity * some_factor;。变化的主要区域是some_factor的值。这通常使用整数算术执行,因此对于较小的数字,舍入往往会隐藏底层模式。 -
如果您使用的是 Microsoft 的标准库,那么它会增加 1.5 倍。 Stephan T. Lavavej 曾在他的一个关于性病的在线视频中这样说。