首页 > 代码库 > Effective STL: 使用reserve来避免不必要的内存分配

Effective STL: 使用reserve来避免不必要的内存分配

使用reserve来避免不必要的内存分配
  • 当确切或大约知道有多少元素将最后出现在容器中
vector<int> v;

// 如果此处不用reserve来先出发内存分配,下面的循环会出现多次内存的重新分配(涉及到分配、回收、拷贝、析构等耗费昂贵的动作)
v.reserve(1000);

for (int i = 1; i <= 1000; ++i)
{
    v.push_back(i);
}
  • 保留你可能需要的最大的空间,然后,一旦你添加完全部数据,修整掉任何多余的容量(可以考虑用swap来修整过剩容量给出的方法)

大小和容量之间的关系让我们可以预言什么时候插入将引起vector或string执行重新分配

string s;
...
if (s.size() < s.capacity())
{
    // push_back不会使指向这个string中的迭代器、指针或引用失效,因为string的容量保证大于它的大小
    s.push_back(‘x‘);
}

Effective STL: 使用reserve来避免不必要的内存分配