我知道在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
答案 0 :(得分:4)
这取决于实现,因此在切换操作系统,编译器等时不要指望相同的模式。
最常见的增长模式是1.5 * previous_capacity
和2 * previous_capacity
。在你的例子中,它似乎是前者。
请参阅https://stackoverflow.com/a/1100426/784668,了解为何选择该因素的可能解释。关键是它显然允许重用以前用于存储阵列的空闲内存块。
答案 1 :(得分:1)
这是一个实现细节,你不应该关心它。在你的情况下,它似乎像
i += i/2
但有点复杂。