使用reserve函数避免vector和string的内存重新分配

vector和string内部维护的内存会“自动增长”,以便容纳不断放入其中的元素。调用max_size()可以返回其容量的最大限制。

“自动增长”的过程如下:

(1)分配一块大小为当前容量的某个倍数的新内存。

(2)将元素从旧内存拷贝到新内存。

(3)析构旧内存中的对象。

(4)释放旧内存。

“自动增长”的过程很耗时,并且会导致所有的指针、迭代器和引用失效。所以避免频繁的内存重新分配就显得很重要。

使用成员函数reserve()可以避免因“自动增长”而造成的内存重新分配。要尽早的使用reserve,把容量设为足够大。最好在容器刚被构造出来之后就使用reserve。

vector<int> v;
v.reserve(1000);
for (int i = 1; i <= 1000; ++i)
  v.push_back(i);

posted on 2012-12-06 10:28  zhuyf87  阅读(613)  评论(0编辑  收藏  举报

导航