对于vector和string来说,当他们需要更多的空间时,就会自动增加内存空间,每次增加内存空间都必须增加内存块,他们的容量每次变为2倍,然后把所有元素的旧内存移动到新内存中去,接着销毁新内存的对象,回收新内存的空间。
所以,每次分配空间后,所有指向vector和string的迭代器、指针和引用都会失效,所以如果题设的内存太大时,就会使数据结构膨胀。
如果使用reserve() 就会避免这一问题的发生
例如:
建设建立一个1~1000的容量值的内存,如果不用reverse() ,则新分配的内存容量将会大约是2的10次方
vector<int>a;
for(int i = 1; i <= 1000; i++) a.push_back(i);
当使用reverse就可以避免这一问题的发生
vector<int>a;
a.reserve(1000);
for(int i = 1; i <= 1000; i++) a.push_back(i);