C++中push_back和emplace_back的区别(代码+踩坑记录

文章讲述了C++中`push_back`和`emplace_back`的区别,前者涉及临时对象构造和拷贝,后者直接在容器末尾构造,避免拷贝。通过自定义类A的实例,展示了如何通过`emplace_back`提高性能。
摘要由CSDN通过智能技术生成

1. 主要区别

如果要将一个临时变量push到容器的末尾:

  • push_back()需要先构造临时对象,再将这个对象拷贝到容器的末尾,
  • emplace_back()则直接在容器的末尾构造对象,这样就省去了拷贝的过程。

2. 自定义一个数据类型测试

2.1 push_back

class A
{
public:
    A(int i) {
        this->str = std::to_string(i);
        cout << "构造函数" << endl;
    };
    ~A() {};

    A(const A& other) :str(other.str) {
        cout << "拷贝构造函数" << endl;
    };
    string str;
};


void fun() {
	vector<A> v1;
	v1.reserve(3);
	for (int i = 0; i < 3; i++)
	{
		v1.push_back(A(i));
		//v1.emplace_back(i);
	}
}

输出是3次构造, 3次拷贝:

2.2 emplace_back 

传入的参数是什么很重要!!!!!!

如果传入A(i),也是3次构造,3次拷贝。因为A(i)相当于构造了对象,再把对象传入。


void fun() {
	vector<A> v1;
	v1.reserve(3);
	for (int i = 0; i < 3; i++)
	{
		v1.emplace_back(A(i)); // 传入 A(i)
        //v1.emplace_back(i);
	}
}

 

直接传入i,emplace back 会自动在末尾构造对象,不需要拷贝。


void fun() {
	vector<A> v1;
	v1.reserve(3);
	for (int i = 0; i < 3; i++)
	{
		//v1.emplace_back(A(i)); // 传入 A(i)
        v1.emplace_back(i);  //直接传i
	}
}

 从输出结果可以看到,仅仅调用了三次构造函数!!!

写文章

热门文章

  • YOLOV5-LITE实时目标检测(onnxruntime部署+opencv获取摄像头+NCNN部署)python版本和C++版本 7686
  • 从O到1:YOLOV5训练自己的目标检测数据集,并使用C++部署,python部署,树莓派等等。 2533
  • VS2019配置SQLite3(小白教程,成功) 1704
  • QT界面(QWidget)显示中文乱码(已解决) 1150
  • Ubuntu20.04配置NCNN推理框架(转换yolov5 onnx格式到ncnn格式 1022

最新评论

  • YOLOV5-LITE实时目标检测(onnxruntime部署+opencv获取摄像头+NCNN部署)python版本和C++版本

    时间路人177: 我也卡在这儿了表情包

  • QT界面(QWidget)显示中文乱码(已解决)

    油炸自行车: 同博主,我这也只有第一种是成功的,2和3都不行

  • VS2019配置SQLite3(小白教程,成功)

    想写C++的AI初学者: 我不涉及MFC,我是搞 Cpp + QT + AI的

  • VS2019配置SQLite3(小白教程,成功)

    北爱玉衡: AI还会涉及MFC吗?

  • YOLOV5-LITE实时目标检测(onnxruntime部署+opencv获取摄像头+NCNN部署)python版本和C++版本

    Kevin kala: 我也是这样 感觉是推理这部分有问题? names 我也改了

最新文章

  • 设计模式--观察者模式
  • 设计模式--策略模式
  • 设计模式--模板方法模式
2024年10篇
2023年7篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 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 网站制作 网站优化