我们知道,在C++ STL中,vector是一种动态数组,它的内存分配机制是在需要时动态分配内存。当vector的元素数量超过当前分配的内存空间时,vector会自动重新分配更大的内存空间,并将原有的元素复制到新的内存空间中。
那么vector会按照什么样的策略选择新的内存空间大小呢?通过下面几行代码一探究竟:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
std::vector<int> vecInt;
size_t capacity = vecInt.capacity();
unsigned int unCount = 0;
cout << "vector初始内存大小:" << capacity << endl;//打印vector初始内存大小
for (int i = 0; i < 100000; ++i)
{
vecInt.emplace_back(i);
if (capacity != vecInt.capacity())//如果重新分配内存,则打印新分配内存大小
{
++unCount;
capacity = vecInt.capacity();
cout << "vector第" << unCount << "次重新分配内存大小:" << capacity << endl;//打印vector重新分配内存大小
}
}
return 0;
}
运行结果截图:
通过运行结果我们不难看出,vector重新分配内存时,新的内存为原来内存的1.5倍,这种分配内存的策略既避免了频繁分配的开销,又减少了内存浪费,对我们的编程也是一种启示。