在C++中,向vector后面添加元素有两个方法,一个是push_back(),另一个就是emplace_back(),那么同样的功能为什么有两个方法呢?
我们来测试一下:
class Int{
public:
Int(int x) : x(x) {
cout << "构造函数"<<endl;
}
Int(Int && other) : x(other.x) {
cout << "移动构造函数"<<endl;
}
Int(const Int &other) : x(other.x) {
cout << "拷贝构造函数"<<endl;
}
private:
int x;
};
int main(int argc, char const *argv[])
{
vector<Int> values1;
vector<Int> values2;
cout << "push_back: "<<endl;
cout<<"第一次"<<endl;
values1.push_back(1);
cout<<"第二次"<<endl;
values1.push_back(2);
cout << "emplace_back: "<<endl;
cout<<"第一次"<<endl;
values2.emplace_back(1);
cout<<"第二次"<<endl;
values2.emplace_back(2);
return 0;
}
输出:
push_back:
第一次
构造函数
移动构造函数
第二次
构造函数
移动构造函数
拷贝构造函数
emplace_back:
第一次
构造函数
第二次
构造函数
拷贝构造函数
可知,emplace_back()效率要比push_back()高,所以我们平时尽量用前者,但emplace_back()是C++11才用的,所以在一些要兼顾旧版本代码中,应使用后者