在 C++11 之后,vector 容器中添加了新的方法:emplace_back() ,和 push_back() 一样的是都是在容器末尾添加一个新的元素进去,
不同的是 emplace_back() 在效率上相比较于 push_back() 有了一定的提升。
1、多个参数
template< class... Args >
reference emplace_back( Args&&... args );
emplace_back可以加入多个元素
2、构造新对象加入数组
因此,在 emplace_back() 函数中,是支持直接将构造函数所需的参数传递过去,然后构建一个新的对象出来,然后填充到容器尾部的。
3、移动构造函数 move,省去拷贝构造
可以看到直接使用构造参数列表来添加元素的方法,它会使用到了移动构造函数 move 。这也是 emplace_back() 方法的一大特色。
4、性能提高
emplace_back() 函数在原理上比 push_back() 有了一定的改进,包括在内存优化方面和运行效率方面。内存优化主要体现在使用了就地构造(直接在容器内构造对象,不用拷贝一个复制品再使用)+强制类型转换的方法来实现,在运行效率方面,由于省去了拷贝构造过程,因此也有一定的提升。
建议c++11 后使用emplace_back
参考:https://zhuanlan.zhihu.com/p/213853588