push_back()函数向容器中加入一个临时对象(右值元素)时, 首先会调用构造函数生成这个对象,然后条用拷贝构造函数将这个对象放入容器中, 最后释放临时对象。但是emplace_back()函数向容器中中加入临时对象, 临时对象原地构造,没有赋值或移动的操作,因此emplace_back()大部分可以取代push_back()。
push_back总是允许使用统一的初始化,例如:
struct node {
int a;
int b;
};
std::vector v;
v.push_back({ 42, 121 });
另一方面,v.emplace_back({ 42, 121 });将无法正常工作。
本文详细对比了 C++ STL 容器中 emplace_back() 和 push_back() 函数的区别。当向容器添加临时对象时,push_back() 会先创建临时对象再通过拷贝构造函数将其复制到容器中;而 emplace_back() 则直接在容器内部构造对象,避免了不必要的拷贝操作,提高了效率。
419

被折叠的 条评论
为什么被折叠?



