#include<iostream>#include<vector>#include<time.h>#include<algorithm>#defineSIZE5000000usingnamespacestd;classA{public:intoperator()(){returnx;}staticintx;};intA::x=0;intmain(){vector<int>s;clock_tstart1=clock();//对clock函数不理解的,可以看我之间关于<time.h>头文件的帖子!for(inti=0;i<SIZE;++i){s.push_back(i);}clock_tend1=clock();cout<<"直接往容器内添加元素所花费的时间:"<<end1-start1<<endl;vector<int>w;w.resize(SIZE);clock_tstart2=clock();for(inti=0;i<SIZE;++i){s[i]=i;}clock_tend2=clock();cout<<"先申请了10000个字节的空间后往容器内添加元素所花费的时间:"<<end2-start2<<endl;vector<int>q;q.resize(SIZE);clock_tstart3=clock();generate(q.begin(),q.end(),A());clock_tend3=clock();cout<<"通过使用算法,先申请空间后,再往容器内添加元素所花费的时间:"<<end3-start3<<endl;system("pause");return0;}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455

以下为在vs2013下的运行结果,时间的单位为毫秒.就会发现结果相差甚远,当数据量更多的时候,又会发生什么呢?

原来当容器内的元素超过容器的容量时,容器是如何扩充容量的呢?原来是重新找了一块更大的内存,然后把原容器内的元素进行拷贝到新容器内,然后在释放原容器所释放的空间.所以每当容量需要扩充时,就多进行了一个拷贝的过程.所以在使用容器时,最好事先分配好一部分的元素空间,而不是要多次扩充容量.