C++ 中"emplace_back" 与 "push_back" 的区别
C++中"emplace_back"与"push_back"的区别
emplace_back和push_back都是向容器内添加数据.
对于在容器中添加类的对象时,相比于push_back,emplace_back可以避免额外类的复制和移动操作.
"emplace_backavoidstheextracopyormoveoperationrequiredwhenusingpush_back."
参见:http://en.cppreference.com/w/cpp/container/vector/emplace_back
注意下面代码中的emplace_back和push_back的添加方式(VS2012下编译通过):
#include#include #include structPresident { std::stringname; std::stringcountry; intyear; President(std::stringp_name,std::stringp_country,intp_year) :name(std::move(p_name)),country(std::move(p_country)),year(p_year) { std::cout<<"Iambeingconstructed.\n"; } President(President&&other) :name(std::move(other.name)),country(std::move(other.country)),year(other.year) { std::cout<<"Iambeingmoved.\n"; } President&operator=(constPresident&other); }; intmain() { std::vector elections; std::cout<<"emplace_back:\n"; elections.emplace_back("NelsonMandela","SouthAfrica",1994);//没有类的创建 std::vector reElections; std::cout<<"\npush_back:\n"; reElections.push_back(President("FranklinDelanoRoosevelt","theUSA",1936)); std::cout<<"\nContents:\n"; for(Presidentconst&president:elections){ std::cout< 感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!