vector和string内部维护的内存会“自动增长”,以便容纳不断放入其中的元素。调用max_size()可以返回其容量的最大限制。
“自动增长”的过程如下:
(1)分配一块大小为当前容量的某个倍数的新内存。
(2)将元素从旧内存拷贝到新内存。
(3)析构旧内存中的对象。
(4)释放旧内存。
“自动增长”的过程很耗时,并且会导致所有的指针、迭代器和引用失效。所以避免频繁的内存重新分配就显得很重要。
使用成员函数reserve()可以避免因“自动增长”而造成的内存重新分配。要尽早的使用reserve,把容量设为足够大。最好在容器刚被构造出来之后就使用reserve。
vector v;v.reserve(1000);for (int i = 1; i <= 1000; ++i) v.push_back(i);