今天参考别人的代码,发现别人在使用emplace_back()而不是push_back(),我就去查了一下,发现原因是这样的:
emplace_back能就地通过参数构造对象,不需要拷贝或者移动内存,相比push_back能更好地避免内存的拷贝与移动,使容器插入元素的性能得到进一步提升。
那我们动手比较一下:
先看push_back()
#include<bits/stdc++.h>
using namespace std;
int main()
{
clock_t start,finish;
int times=20,cnt=10000000;
int sum=0;
for(int i=0;i<times;i++)
{
start=clock();
vector<int> vec;
for(int i=0;i<cnt;i++)
vec.push_back(1);
finish=clock();
double tmp=(double)(finish-start)/CLOCKS_PER_SEC;
cout<<"cost of time/ms:"<<tmp*1000<<endl;
sum+=tmp*1000;
}
cout<<"the average time:"<<sum/times<<endl;
return 0;
}
运行结果:
再看emplace_back()
#include<bits/stdc++.h>
using namespace std;
int main()
{
clock_t start,finish;
int times=20,cnt=10000000;
int sum=0;
for(int i=0;i<times;i++)
{
start=clock();
vector<int> vec;
for(int i=0;i<cnt;i++)
vec.emplace_back(1);
finish=clock();
double tmp=(double)(finish-start)/CLOCKS_PER_SEC;
cout<<"cost of time/ms:"<<tmp*1000<<endl;
sum+=tmp*1000;
}
cout<<"the average time:"<<sum/times<<endl;
return 0;
}
运行结果: