vector中emplace_back和push_back的区别

emplace_back和push_back的区别。他们都是往容器中插入元素

emplace_back是c++11新增的成员函数,在vector尾部插入一个新的元素

cpp 复制代码
template< class... Args >
void emplace_back( Args&&... args );

emplace_back可以避免创建元素的额外对象(调用该参数的构造函数来创建新元素),提高代码执行效率

push_back,将该对象的副本插入vector的尾部

cpp 复制代码
void push_back(const T& value);
void push_back(T&& value);

其中,第一个重载将 value 的副本作为左值插入 vector,而第二个重载则将 value 的右值插入 vector,可以用于移动语义。

因此,可以得出 emplaceback 和 pushback 的区别如下:

对于构造元素所需的参数数量,emplaceback 比 pushback 更加灵活。emplaceback 支持任意数量的参数,而 pushback 只接受一个对象作为参数。

emplaceback 构造新元素时,直接在 vector 中分配空间并进行对象构造 ,而 pushback 则是先在栈上创建一个临时对象再将该对象的副本插入 vector 中。因此,使用 emplace_back 可以减少创建不必要的临时对象,提高程序的效率。

在实际编程中,应优先考虑使用 emplaceback,仅当 必须将已有对象 插入到 vector 中时,才使用 pushback。

总结一下:1.emplace可以支持任意数量的参数

2.直接vector分配空间进行对象构造,push_back栈上创建一个临时对象,在创建副本插入

3.仅当必须将已有对象插入vector中,才使用push_back

相关推荐
北域码匠26 分钟前
冒泡排序太慢?鸡尾酒排序双向优化,原生 C# 零第三方库完整代码
数据结构·排序算法·泛型·c# 算法·鸡尾酒排序·原生 c# 开发·冒泡排序优化·嵌入式算法
kisshyshy3 小时前
从递归到迭代,一文吃透二叉树的核心知识与 JavaScript 实现
javascript·算法·代码规范
To_OC14 小时前
LC 49 字母异位词分组:想到哈希表很简单,选对 key 才是精髓
javascript·算法·leetcode
用户9385156350719 小时前
从 O(n²) 到 O(nlogn):一文读懂快速排序的“快”与“妙”
javascript·算法
To_OC20 小时前
手写快排次次翻车?别死背快排模板了,这才是面试官想听的底层逻辑
javascript·算法·排序算法
饼干哥哥21 小时前
Reddit VOC调研太慢?搭一个AI专家团队半小时洞察任何品类|以猫用饮水机为例
人工智能·算法·ai编程
地平线开发者1 天前
Transformer模型部署之性能优化指南
算法
地平线开发者1 天前
人在途中:从“编译失败”到“模型可落地”——CUDA 自定义算子
算法·自动驾驶
半个落月1 天前
从递归到快速排序:用 JavaScript 把分治思想讲明白
javascript·算法·面试
小月土星1 天前
JavaScript 快速排序:从 pivot、双指针到分治思想
javascript·算法·面试