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

相关推荐
无限码力23 分钟前
8.26华为OD机试真题 新系统【字符串回文判断】
算法·华为od·华为od机考·华为od机试·华为od上机考试真题·华为od最新机试真题题解·华为od机试真题题库
玖玥拾2 小时前
LeetCode 125 验证回文串
算法·leetcode
Asize9 小时前
146. LRU 缓存
算法
Asize9 小时前
543. 二叉树的直径
算法
lemon_sjdk9 小时前
ObjectProperty
java·开发语言·算法
Zentceh10 小时前
AI-ISP在夜视机芯中的应用:从传统ISP到PixelClean全彩夜视的进化
人工智能·科技·算法·计算机视觉·车载系统·视频·智能硬件
xier_ran10 小时前
【infra之路】AWQ 详解:激活感知权重保护,让 W4A16 量化精度超越 GPTQ
线性代数·算法·机器学习·量化·infra
亦皓ai10 小时前
AI时代后端工程(二):AI把代码写得越来越快,我却越来越不敢让它直接开工了
人工智能·算法·机器学习·搜索引擎·transformer
玖玥拾12 小时前
LeetCode 392 判断子序列
笔记·算法·leetcode
不灭的黄金瞳12312 小时前
C语言手写顺序表
c语言·开发语言·数据结构