emplace_back()是c++11的新特性。
和push_back()的区别在于
push_back()方法要调用构造函数和复制构造函数,这也就代表着要先构造一个临时对象,然后把临时的copy构造函数拷贝或者移动到容器最后面。
而emplace_back()在实现时,则是直接在容器的尾部创建这个元素,省去了拷贝或移动元素的过程。

vector<pair<int, int>> ret;
ret.push_back(1,1)//会报错,因为没有构造一个临时对象
ret.push_back(pair(1,1))//不会报错,因为构成了一个pair对象
ret.emplace_back(1,1)//不会报错,因为直接在容器的尾部创建对象

在leetoce上的一题,emplace_back的用法让我更加的理解,以下是从leetcode上截取的一段代码

vector<vector<int>> ans;int lastcol = INT_MIN;for (const auto& [col, row, value]: nodes) {if (col != lastcol) {lastcol = col;ans.emplace_back();//这里的emplace_back()直接在ans的尾部创建一个类型为vector<int>的空对象,如果省去这一行,后面的ans.back()会是一个空指针而报错。}ans.back().emplace_back(value);}

关于emplace_back()的理解相关推荐

  1. Imu_heading源码阅读(四)——具体实现

    imu_heading.hpp: #pragma once一般由编译器提供保证:同一个文件不会被包含多次.这里所说的"同一个文件"是指物理上的一个文件,而不是指内容相同的两个文件. ...

  2. C++_可变参数模板到emplace_back再到construct再到forward

    C++_可变参数模板到emplace_back再到construct再到forward 1.可变参数模板 具体定义如下图所示: 编写一个可变参数版本: 1.1sizeof-运算符 2.emplace_ ...

  3. 理解 C++ 的 Memory Order 以及 atomic 与并发程序的关系

    为什么需要 Memory Order 如果不使用任何同步机制(例如 mutex 或 atomic),在多线程中读写同一个变量,那么,程序的结果是难以预料的.简单来说,编译器以及 CPU 的一些行为,会 ...

  4. 理解C++ Executor的设计理念

    文章目录 简介 代码示例 参考 简介 很多时候,我们的可调用对象需要某些非参数依赖的执行环境.可以这么理解,我们的任务是就绪的,不需要依赖外界传入参数了,只需要以某种方式控制方法的when .wher ...

  5. emplace_back不能取代push_back的情况

    1.当直接把构造好的元素放入数组时不能直接使用前者: vector<vector<int>> v; v.push_back({1,2,3}); // OK v.emplace_ ...

  6. C++小实验之vector的 push_back 和 emplace_back 及其使用时机

    参考 参考一: 如果参数是左值,两个调用的都是copy constructor 如果参数是右值,两个调用的都是move constructor(C++ 11后push_back也支持右值) 最主要的区 ...

  7. C++的emplace_back函数介绍

    C++ STL的vector相信大家一定都知道,它一般用来当做可变长度的列表.在C++11之前,一般给vector插入新元素用得都是push_back函数,比如下面这样: std::vector< ...

  8. 《深入理解Android 卷Ⅰ》深入理解init

    深入理解init 1.1 概述 init 是一个进程,确切地说,它是Linux 系统中用户空间地第一个进程.由于Android 是基于Linux 内核的,所以init 也是Android 系统中用户空 ...

  9. Cartographer分枝定界算法比喻理解

    Cartographer的代码非常紧凑,为了加深自己的理解和印象,尝试用比喻的方法去描述出来,欢迎大家交流指正. BnB比喻: 一家公司,有多个职位等级(对应多分辨率地图),现在要评项目奖金. 符合以 ...

最新文章

  1. zeptojs-跑马灯效果
  2. 走进STM32世界之Hex程序烧写
  3. idea 亮度 调整_WIN10 困扰多时的屏幕亮度 终于可以调节了-完美 -更新2018年2月28日...
  4. wget java 1.7_linux下安装和配置jdk1.7
  5. linux解压实例,linux 下面压缩,解压.rar文件以及rar,unrar实例
  6. android webview 报错,Android WebView 5.x 系统下 Resources$NotFoundException异常处理
  7. mysql50道题 查询和,Mysql Sql 语句练习题 (50道)
  8. labelimg如何调整框的颜色_P图改字:来看看吧!教你如何用PS墙壁发光灯泡广告文字图片...
  9. 80%的软件环境管理问题,根因都在这里
  10. java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)
  11. SearchParams(URL获取参数)
  12. android 小红点自动显示,Android应用图标上的小红点Badge实践代码
  13. 31. Magento图片大小调整的相关代码
  14. 不同语言实现两个变量的交换 Python之禅
  15. 英语系大一计算机课程有哪些,英语专业大一学习计划.docx
  16. 麒麟操作系统V10登录微信报错
  17. 用c 语言编写乘法口诀表,用C语言编程乘法口诀表
  18. 浦发银行计算机抓紧用面试题目,浦发银行面试问题
  19. 【沃顿商学院学习笔记】商业分析——Customer Analytics:04 规范性分析 Prescriptive Analytics
  20. (原创)贴片电阻封装尺寸

热门文章

  1. Android”挂逼”修炼之行—微信摇骰子和猜拳作弊器原理解析
  2. GET/POST 和TCP/UDP 区别
  3. 手机上流行的各类谜语及谜底
  4. 阿朱推荐的产品经理读物30本书(修订版)
  5. 传感网应用开发(环境部署)
  6. 网站优化长尾词怎么做排名优化
  7. 最好的IDEA debug长文?看完我佛了
  8. 基于Android系统的高精度定位SDK方案
  9. yaml/yml语法
  10. 天翼物联获2022年移动物联网“先进企业”