【c++】

emplace操作是C++11新特性,新引入的的三个成员emlace_front、empace 和 emplace_back,这些操作构造而不是拷贝元素到容器中,这些操作分别对应push_front、insert 和push_back,允许我们将元素放在容器头部、一个指定的位置和容器尾部。

emplace_back vs push back
在 C++11 之后,vector 容器中添加了新的方法:emplace_back() ,和 push_back() 一样的是都是在容器末尾添加一个新的元素进去,不同的是 emplace_back() 在效率上相比较于 push_back() 有了一定的提升。

将 emplace_back() 和 push_back() 区别:

_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
std::forward<_Args>(__args)…); // emplace_back()
_Alloc_traits::construct(this->_M_impl, this->_M_impl._M_finish,
__x); // push_back()
push_back() 方法添加创建好的元素,可以看出使用到了拷贝构造函数。
emplace_back()直接使用构造参数列表来添加元素的方法,使用移动构造函数 move

emplace_back() 函数在原理上比 push_back() 有了一定的改进,包括在内存优化方面和运行效率方面。内存优化主要体现在使用了就地构造(直接在容器内构造对象,不用拷贝一个复制品再使用)+强制类型转换的方法来实现,在运行效率方面,由于省去了拷贝构造过程,因此也有一定的提升。

emplace_back vs emplace
emplace_back(t)在c的尾部创建一个值为t的元素
emplace_front(t)在c的头部创建一个值为t的元素
emplace(p,t)在迭代器p所指向的元素之前创建一个值为t的元素,返回指定新添加元素的迭代器

你可能感兴趣的:(c++,c++,java,开发语言)