emplace_back() 和 push_back 的区别:emplace_back效率高,避免push_back使用时所需的额外副本或移动操作

45 篇文章 1 订阅
订阅专栏

学习 emplace_back() 和 push_back 的区别 emplace_back效率高

引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题是临时变量申请的资源就浪费。 

c++11引入了右值引用,转移构造函数( 请看这里)后,push_back()右值时就会调用构造函数转移构造函数。 

在这上面有进一步优化的空间就是使用emplace_back

emplace_back   在容器尾部添加一个元素,这个元素原地构造不需要触发拷贝构造转移构造。而且调用形式更加简洁,直接根据参数初始化临时对象的成员。  emplace_back 避免push_back使用时所需的额外副本移动操作

emplace_back
函数原型:

template <class... Args>
  void emplace_back (Args&&... args);


容器尾部添加一个元素,这个元素原地构造不需要触发拷贝构造转移构造。而且调用形式更加简洁,直接根据参数初始化临时对象的成员
给出一个示例,这个示例很有用。

 

#include<vector>
#include<string>
#include<iostream>

struct President
{
    std::string name;
    std::string country;
    int year;

    President(std::string p_name, std::string p_country, int p_year)
        : name(std::move(p_name)), country(std::move(p_country)), year(p_year)
    {
        std::cout << "I am being constructed.\n";
    }
    President(const President& other)
        : name(std::move(other.name)), country(std::move(other.country)), year(other.year)
    {
        std::cout << " I am being copy constructed. \n";
    }
    President(President&& other)
        : name(std::move(other.name)), country(std::move(other.country)), year(other.year)
    {
        std::cout << " I am being moved. \n";
    }
    President& operator= (const President& other);
};
int main()
{
    std::vector<President> elections;
    std::cout << " emplace_back: \n";
    elections.emplace_back("Nelson Mandela", "South Afraca", 1994);

    std::vector<President> reElections;
    std::cout << "\npush_back \n";
        reElections.push_back(President("Frankling Delano Roosevelt", "the USA", 1936));

    std::cout << "\nContens:\n";
    for (President const& president : elections) {
        std::cout << president.name << " was elected president of"
                << president.country << " in" << president.year << ".\n";
        }
    for (President const& president : reElections) {
        std::cout << president.name << "was re-elected president of "
                << president.country << " in " << president.year << ".\n";
    }
}

C++ emplace_back 与 push_back
m0_73935863的博客
03-03 1571
C++ emplace_back 与 push_back
emplace_back和push_back对比分析
m0_70418130的博客
07-27 1079
emplace_back是C++11新引进的接口函数。emplace_back是就地构造,不用构造后再次复制到容器中。因此效率更高。
C++ 中"emplace_back" 与 "push_back" 的区别
08-30
主要介绍了C++ 中"emplace_back" 与 "push_back" 的区别的相关资料,要的朋友可以参考下
emplace_back和push_back
weixin_67051070的博客
03-24 411
等序列容器的成员函数,它们都用于在容器的末尾添加新元素。然而,它们在添加元素的方式上有所不同,这导致了它们在性能和使用场景上的差异。避免了临对象的创建和随后的复制或移动,因此在性能上通常更优。对象,没有创建临对象。则直接使用提供的参数在。对象,然后将其添加到。
emplace_back和push_back超详细讲解+常见问题分析[more cpp-5]
最新发布
FlamBoyanceI的博客
08-25 444
这两个函数都是在容器的尾部插入对象,不过push_back是早期的函数(为CPP98,就是第一个CPP标准化版本),emplace_back则是在CPP11加入的重要特性,是CPP高性能化的重要特征。简单的来说 - push_back是传入一个对象,而后在容器的尾部拷贝一个出来 - emplace_back是传入构造对象的参数,然后直接在**对象尾部直接构造出来这个对象**
emplace_back与push_back
LIUMINGHUA111的博客
08-10 266
push_back:要先创建对象,然后将其复制或移动到容器中。:直接在容器中构造对象,避免额外的复制或移动,通常更高效。在要频繁添加对象使用可以提高性能。对于,使用push_back和的性能差异可以忽略不计。选择使用哪一个通常取决于代码的可读性和一致性。在处理基本数据类型,您可以根据个人或团队的编码风格来选择。对于,使用通常比push_back更高效,特别是在处理复杂对象。建议,在要频繁添加字符串的情况下,使用,以提高性能。使用push_back。
emplace_back与push_back的真实效率比较
Leo的专栏
11-10 599
我测下的结果,反而是push_back耗更小些。这个明显和大家的结论不一致。 #include <vector> #include <iostream> #include <sys/time.h> using namespace std; int64_t GetSysTimeMicros() { timeval tv; gettimeofday(&tv, 0); return (int64_t)tv.tv_sec * 100000
emplace_back/emplacepush_back/insert 效率的详细比较
FinixLei的专栏 (https://github.com/FinixLei)
03-16 6506
emplace_back/emplacepush_back/insert 的效率比较 在 STL 的容器中,除了给 vector 等序列容器定义了push_back方法之外,还定义了emplace_back方法; 除了给 map 等关联容器定义了insert方法外,还定义了emplace方法。 那么,emplace_back/emplacepush_back/insert 的区别是什么?前者是否比后者更快呢? 区别分析 首先谈谈区别。 如果要将一个结构体类型的实例,放入容器中,一般有2个步骤:
C++ 中”emplace_back” 与 “push_back” 的区别
01-01
对于在容器中添加类的对象, 相比于push_back,emplace_back可以避免额外类的复制和移动操作. “emplace_back avoids the extra copy or move operation required when using push_back.” 参见: ...
c++ emplace_back与push_back
01-08
容器的emplace_back与push_back方法 emplace_back针对添加的元素为 “某个对象struct、class” ,可以直接写参数,函数自动调用构造函数,而不用先创建对象再添加。 push_back要先创建对象,再添加。 emplace、...
emplace_back() 和 push_back 的区别
We_are_family678的博客
07-26 499
在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临对象)的候,首先会调用构造函数构造这个临对象,然后要调用拷贝构造函数将这个临对象放入容器中。原来的临变量释放。这样造成的问题是临变量申请的资源就浪费。 引入了右值引用,转移构造函数(请看这里)后,push_back()右值就会调用构造函数和转移构造函数。 在这上面有进一步优化...
push_back和emplace_back
qq_64863535的博客
04-15 401
的效率更高主要是因为它避免了不必要的拷贝或移动操作,以及不必要的临对象的构造和销毁,直接在容器内部就地构造新元素。因此,在要构造新元素,尤其是对于大型对象或不能被移动的对象的容器来说,推荐使用,元素会直接在容器内部就地构造,而不是首先构造一个临对象,然后再将其拷贝或移动到容器中。,参数列表会直接传递给元素类型的构造函数,因此不会发生拷贝或移动操作,而是直接在容器中构造新元素。,参数会被拷贝或移动到容器中,因此会调用元素类型的拷贝构造函数或移动构造函数。对于构造一个新元素而言,使用
说说vector的emplace_back和push_back
iaibeyond的专栏
07-27 6958
稍微了解过C++11的同学都知道,stl提供的标准容器新添加了一些列的操作函数,我们今天就简单聊聊vector新添加的emplace系列函数。 vector添加的emplace系统函数有2个,emplaceemplace_back,其功能分别对应insert和push_back。我们以emplace_back为例,emplace的原理类似。网上有不少相关的介绍,最后结论都是说emplace_back是更好的方法,那么为什么emplace_back更好呢? 要解释为什么emplace优于push_bac
STL:push_back和emplace_back
qq2904529388的博客
03-17 1300
那么这样有什么用呢?如图所示使用emplace_backemplace_back效率要比push_back高。
push_back 和 emplace_back 剖析
weixin_44974875的博客
12-13 6402
emplace_back() 和 push_back()的区别,就在于底层实现的机制不同。push_back() 向容器尾部添加元素,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素);
emplace_back与push_back使用区别,move语义、与vector内存空间开辟弊端
Twoton的博客
01-15 3364
当我们传递一个对象的参数给这两个函数,分别由如下区别emplace_back支持直接将构造函数所的参数传递过去,然后构建一个新的对象出来,然后填充到容器尾部的。 push_back首先会利用传入的参数调用构造函数构造这个临对象,然后要调用拷贝构造函数将这个临对象放入容器中。原来的临变量释放。这样造成的问题就是临变量申请资源的浪费。 #include <vector> #include <string> #include <iostream> using
C++性能优化秘籍:emplace_back() vs push_back()
m0_72877724的博客
07-14 1205
在C++中,向容器添加元素是一个常见的操作。STL容器(如vector、list、deque等)提供了两种主要的方法来在末尾添加元素:push_back() 和 emplace_back()。虽然它们的目的相似,但在实现和性能上有着显著的区别。让我们深入了解这两个函数,看看如何优化你的代码。
emplace_back 和 push_back的区别
燃犀的博客
02-26 1813
emplace_back和push_back在功能上是一致的,即在容器后方插入新的元素。
emplace_back和push_back能混用吗
03-14
emplace_back和push_back是C++中向容器中添加元素的两种方法,它们可以混用,但是要注意它们的区别。 1. emplace_back:emplace_back函数是C++11引入的,它可以在容器的末尾直接构造一个元素,而不要先创建一个临对象再进行拷贝或移动操作。它接受的参数是构造元素所的参数,而不是元素本身。这样可以避免额外的拷贝或移动操作,提高了性能。 2. push_back:push_back函数是向容器的末尾添加一个已经存在的元素。它接受的参数是一个已经存在的元素,会将该元素拷贝或移动到容器中。 由于emplace_back直接在容器中构造元素,而push_back要先创建一个临对象再进行拷贝或移动操作,所以emplace_back通常比push_back更高效。但是要注意的是,emplace_back只能用于支持构造函数参数的容器,例如vector、list、map等,而不能用于array等不支持构造函数参数的容器。
2059
原创
1万+
点赞
1万+
收藏
1万+
粉丝
关注
私信
写文章

热门文章

  • 知识图谱构建全流程 64412
  • 多头注意力比单头好在哪? 26527
  • 大语言模型的指令微调(Instruction Tuning)最全综述:从数据集到技术全解析 25311
  • MetaGPT技术全解析:另一个AutoGPT,一个可以替代小型软件开发团队的配备齐全的软件开发GPT,产品经理、系统设计、代码实现一条龙 14399
  • mapjoin的使用方法以及注意事项 13218

分类专栏

  • LLM大语言模型 付费 446篇
  • 多模态MLLM大模型面试指南 付费 21篇
  • 大模型LLM面试指南 付费 35篇
  • AIGC面试专栏 付费 4篇
  • 代码模型微调 1篇
  • AI科研/相关文章/科研方向/科研工具 23篇
  • AI驱动的科研-科研自动化 10篇
  • AI编程之代码大模型研究 47篇
  • 代码评估 7篇
  • 代码搜索 1篇
  • 人形机器人/机器人学/具身智能/仿人机器人/真正通用AI 15篇
  • 提示工程/大模型使用教程PromptEngineering 16篇
  • 学术/期刊/会议相关信息,发表资讯 9篇
  • 伟大的工程师集锦-以激励自己 10篇
  • AI_LLM_Agent智能体 22篇
  • 人脸识别与分类 2篇
  • 多模态大规模图像分类/植物分类 19篇
  • 室内场景数据集 2篇
  • 图片生成-用作训练 3篇
  • 科技产业观察 2篇
  • 大语言模型LLM
  • 计算机博士后与博士 3篇
  • AIGC/视频生成、SORA、StableDiffusion 20篇
  • 数据科学算法竞赛 7篇
  • Linux小工具 1篇
  • 计算机视觉CV 15篇
  • CV-目标检测-Object Detection 7篇
  • 多模态基座模型FloundationModel 1篇
  • 多模态大模型VisualLLM 25篇
  • CV-图像分割-SAM 3篇
  • InternVL2书生蒲语多模态大模型/源码解析 17篇
  • GitHub学习与贡献成为Contributor 6篇
  • swift微调框架源码解析 7篇
  • LlaMa-Factory源码解析 17篇
  • 华为国产昇腾/曙光NPU硬件大模型 8篇
  • 人类溃败史 1篇
  • 大模型技术文章(转载) 1篇
  • 混合专家模型MOE 47篇
  • 大模型/增量预训练CPT 17篇
  • AI商业/产品/投融资前沿 21篇
  • 预训练语言模型 16篇
  • 大模型数据准备/预处理 13篇
  • 爬虫/网页自动化/数据获取
  • 多模态语音模型/大语音模型 15篇
  • transformers源码解析 16篇
  • 浪潮源大模型Yuan-LLM 6篇
  • Qwen千问源码解析及介绍 21篇
  • 大模型量化/部署 6篇
  • LLM分布式训练框架DeepSpeed/accelerate 29篇
  • 力扣leetcode算法与数据结构刷题 196篇
  • 大模型强化学习LLM/DPO/PPO/RLHF 30篇
  • AI+医疗 20篇
  • 开发及效率工具使用PycharmVS Code 6篇
  • 前沿AI大模型论文翻译与解读 22篇
  • 大模型RAG检索增强/知识库 21篇
  • Llama源码解析 5篇
  • 大语言LLM评测 13篇
  • Python 73篇
  • 搜索算法 4篇
  • 算法与人生-人生优化算法 4篇
  • 人机交互 1篇
  • 语音识别 1篇
  • 专家系统 2篇
  • Pytorch源码解析 1篇
  • 科研制图 1篇
  • KG图神经网络GNN、GCN、GCT 66篇
  • 大语言模型LLM应用-领域微调或角色化 19篇
  • C++大模型加速源码解析 1篇
  • 时间序列 1篇
  • NLP自然语言处理 38篇
  • 知识图谱 57篇
  • 人工智能哲学 5篇
  • 硬科学与自动化 1篇
  • 图神经源码解析 2篇
  • 编程/AI/项目/人生随想哲学 2篇
  • AGI生成式新闻或相关八卦/周边 26篇
  • 脑科学与认知科学 22篇
  • 算法竞赛结果记录 1篇
  • 量化金融 70篇
  • 如何学习 2篇
  • 中华传统易经与九运 4篇
  • 多伦对话 1篇
  • 力扣合集大放送 5篇
  • ChatGLM源码解析 23篇
  • 对话系统QA-Rasa 11篇
  • baichuan大模型 - 源码解析 9篇
  • OpenAI GPT4使用 8篇
  • 信息熵与信息差-信息差的数学原理 2篇
  • GPT情感计算 1篇
  • 认知计算-多模态 4篇
  • 少样本大语言模型LIMA 1篇
  • 可解释可信机器学习 - 因果 6篇
  • 生物信息学Bio 2篇
  • OCR文字识别 8篇
  • 推荐系统 89篇
  • 回归任务 3篇
  • 特征工程 2篇
  • Linux 5篇
  • 数据挖掘 26篇
  • 大数据 21篇
  • C++ 45篇
  • 集成学习 5篇
  • Hadoop 7篇
  • 机器学习指标 9篇
  • SQL 7篇
  • Redis 6篇
  • wangluo 2篇
  • 推荐系统周边 4篇
  • 深度学习 7篇
  • 剑指Offer 17篇
  • 机器学习 8篇
  • 数据科学 7篇
  • OpenCV 4篇
  • C++编译 3篇
  • OpenVINO 2篇
  • 智能驾驶 14篇
  • 驾驶规划模块 2篇
  • C++ STL标准模板库 3篇
  • 多语言编程 2篇
  • python机器学习 12篇

最新评论

  • HumanEval是如何进行代码评估的:从数据构成、评估逻辑到pass@k指标计算

    AI生成曾小健: 试着订阅一下呢?

  • HumanEval是如何进行代码评估的:从数据构成、评估逻辑到pass@k指标计算

    早起学习晚上搬砖: 怎么忽然又要订阅了

  • fastllm 大模型推理加速 c++库

    AI生成曾小健: 你不看可以不要看。别在这里骂人

  • 深脸-deepface github项目主业

    cv2016_DL: 这一看就知道是翻译官方的readme

  • [llama factory源码解析.回调函数]src >llamafactory >train >callbacks.py

    NikolaTesla_bin: 咨询下,这个pissa微调之后是用哪个adapter作为下游推理用的adapter。 保存之后的checkpoint-xxx还是pissa-coverted目录的adapter?

最新文章

  • AIGC时代算法工程师的面试秘籍(第二十三式2024.9.16-9.29) |【三年面试五年模拟】
  • 小型 AI 模型挑战 GPT-4,提高商业可及性
  • 开源项目 | 多模态大模型VILA:强大的视频理解和多图理解能力
2024
10月 142篇
09月 69篇
08月 134篇
07月 264篇
06月 85篇
05月 81篇
04月 124篇
03月 88篇
02月 33篇
01月 11篇
2023年407篇
2022年192篇
2021年449篇
2020年2篇
2019年2篇
2018年6篇

目录

目录

分类专栏

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI生成曾小健

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢仿真水果雕塑收费港粤玻璃钢雕塑楼盘玻璃钢人物雕塑销售厂透明玻璃钢雕塑造型设计仿真玻璃钢雕塑商场消防通道美陈菏泽泡沫玻璃钢彩绘雕塑商场美陈氛围布置公众号广东定制玻璃钢雕塑玻璃钢雕塑和石材雕塑作品哪个好贵州火烈鸟玻璃钢雕塑厂家福建装饰商场美陈制作广东通道商场美陈销售企业玻璃钢蔬菜雕塑建造制作金昌动物玻璃钢雕塑制作进口玻璃钢雕塑承诺守信黄山定制玻璃钢雕塑报价揭阳玻璃钢吉祥物卡通雕塑厂家嘉峪关人物玻璃钢雕塑哪家好玻璃钢校园不锈钢雕塑设计玻璃钢雕塑孔子雕像广东开业商场美陈生产厂家郑州铜玻璃钢彩绘雕塑定做东营卡通玻璃钢雕塑制作海南小型玻璃钢佛像雕塑滁州卡通玻璃钢雕塑定做在线咨询商场美陈的书许昌玻璃钢雕塑雕刻价格松原人物玻璃钢雕塑报价广州郑成功玻璃钢人物雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化