【c++】

发布时间:2024年01月21日

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的元素,返回指定新添加元素的迭代器

文章来源:https://blog.csdn.net/ZSZ_shsf/article/details/135717789
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。