先看以下例子:
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
vector<int>v;
// v.reserve(10000);
int num = 0;
int *p = NULL;
for(int i = 0; i < 10000;i++){
v.push_back(i);
if(p!=&v[0]){//每进入一次if 就vector就分配一次内存
p=&v[0];
num++;
}
}
cout<<"num:"<<num<<endl;
return 0;
}
运行结果:
意味着,在往变量v添加10000个元素的时候进行了24次的内存分配。如果添加的元素越多,那么分配的内存的次多也就越多,每次分配还要拷贝内存数据,大大降低了运行速度。将以上代码 // v.reserve(10000);的注释去掉,运行结果为:
只进行了一次的内存分配。在往vector中添加元素的时候,如果能够事先预估元素的个数,可以进行空间预留,减少内存分配次数