关于emplace_back()的理解
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()的理解相关推荐
- Imu_heading源码阅读(四)——具体实现
imu_heading.hpp: #pragma once一般由编译器提供保证:同一个文件不会被包含多次.这里所说的"同一个文件"是指物理上的一个文件,而不是指内容相同的两个文件. ...
- C++_可变参数模板到emplace_back再到construct再到forward
C++_可变参数模板到emplace_back再到construct再到forward 1.可变参数模板 具体定义如下图所示: 编写一个可变参数版本: 1.1sizeof-运算符 2.emplace_ ...
- 理解 C++ 的 Memory Order 以及 atomic 与并发程序的关系
为什么需要 Memory Order 如果不使用任何同步机制(例如 mutex 或 atomic),在多线程中读写同一个变量,那么,程序的结果是难以预料的.简单来说,编译器以及 CPU 的一些行为,会 ...
- 理解C++ Executor的设计理念
文章目录 简介 代码示例 参考 简介 很多时候,我们的可调用对象需要某些非参数依赖的执行环境.可以这么理解,我们的任务是就绪的,不需要依赖外界传入参数了,只需要以某种方式控制方法的when .wher ...
- emplace_back不能取代push_back的情况
1.当直接把构造好的元素放入数组时不能直接使用前者: vector<vector<int>> v; v.push_back({1,2,3}); // OK v.emplace_ ...
- C++小实验之vector的 push_back 和 emplace_back 及其使用时机
参考 参考一: 如果参数是左值,两个调用的都是copy constructor 如果参数是右值,两个调用的都是move constructor(C++ 11后push_back也支持右值) 最主要的区 ...
- C++的emplace_back函数介绍
C++ STL的vector相信大家一定都知道,它一般用来当做可变长度的列表.在C++11之前,一般给vector插入新元素用得都是push_back函数,比如下面这样: std::vector< ...
- 《深入理解Android 卷Ⅰ》深入理解init
深入理解init 1.1 概述 init 是一个进程,确切地说,它是Linux 系统中用户空间地第一个进程.由于Android 是基于Linux 内核的,所以init 也是Android 系统中用户空 ...
- Cartographer分枝定界算法比喻理解
Cartographer的代码非常紧凑,为了加深自己的理解和印象,尝试用比喻的方法去描述出来,欢迎大家交流指正. BnB比喻: 一家公司,有多个职位等级(对应多分辨率地图),现在要评项目奖金. 符合以 ...
最新文章
- zeptojs-跑马灯效果
- 走进STM32世界之Hex程序烧写
- idea 亮度 调整_WIN10 困扰多时的屏幕亮度 终于可以调节了-完美 -更新2018年2月28日...
- wget java 1.7_linux下安装和配置jdk1.7
- linux解压实例,linux 下面压缩,解压.rar文件以及rar,unrar实例
- android webview 报错,Android WebView 5.x 系统下 Resources$NotFoundException异常处理
- mysql50道题 查询和,Mysql Sql 语句练习题 (50道)
- labelimg如何调整框的颜色_P图改字:来看看吧!教你如何用PS墙壁发光灯泡广告文字图片...
- 80%的软件环境管理问题,根因都在这里
- java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)
- SearchParams(URL获取参数)
- android 小红点自动显示,Android应用图标上的小红点Badge实践代码
- 31. Magento图片大小调整的相关代码
- 不同语言实现两个变量的交换 Python之禅
- 英语系大一计算机课程有哪些,英语专业大一学习计划.docx
- 麒麟操作系统V10登录微信报错
- 用c 语言编写乘法口诀表,用C语言编程乘法口诀表
- 浦发银行计算机抓紧用面试题目,浦发银行面试问题
- 【沃顿商学院学习笔记】商业分析——Customer Analytics:04 规范性分析 Prescriptive Analytics
- (原创)贴片电阻封装尺寸