【STL】push 和 emplace区别

相信大家都知道push的作用,对数据进行插入;

往常大家都是怎么用push的呢?

对于内置数据类型大家是不是这样:

这里以stack来举例
stack<int> s1;
s1.push(1);//直接插入数据
int a=2;
s1.push(a);//变量a插入,这两种操作对于内置数据类型都可以

那么如果插入的数据类型是自定义数据类型呢?

class Person
{public:int m_age;string m_name;
};
stack<Person> s2;
//对于这种自定义数据类型还能进行如下的插入操作吗?
s2.push(18,"貂蝉");❌
//答案是否定的
//若想用push进行插入,只能先将这个对象构造出来,再将这个对象插入
Person p1(18,"西施");✅
s2.push(p1);
//或
s2.push(Person(19,"杨玉环"))//传入时构造对象

那么emplace就可以说就是对此“不足”的补充。

对于emplace,C++标准库的简要说明就是构造和插入元素emplace可以直接传入构造对象需要的元素,然后自己调用其构造函数

//那么对于上述错误的push操作就可以用emplace来完成
s2.emplace(20,"张三"); //传入20,"张三"后,它会自己调用一遍Person得构造函数
//此问题发现于,做题需要,需要插入二维数组横纵坐标,想要简单的用pair来进行插入,如
queue<pair<int,int>> q;
q.push(1,1);❌
//得先构造对象
q.push(make_pair<int,int>(0, 0));
//就是想要简单的传入横纵坐标即可,不想有多余的操作,如下,使用emplace
q.emplace(1,1);✅

大概可以理解为push能做的,emplace都能做。

push是得传入得对象先得造好,再复制过去插入;而emplace则可以自己拿到构造对象所需得元素构造出来,直接插入即可。

emplace相比于push省去了复制这步,即使用emplace这种操作会更节省内存

【STL】push 和 emplace区别相关推荐

  1. STL容器的emplace操作

    STL容器的emplace操作 emplace是c++11引入的成员,作用是优化存储类的vector,deque,list容器 c.emplace_back(构造函数的参数) //向尾部添加一个对象, ...

  2. STL vector list deque区别与实现

    1 vector 向量 相当于一个数组     在内存中分配一块连续的内存空间进行存储.支持不指定vector大小的存储.STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacitu ...

  3. php n维数组扁平化,js嵌套的数组扁平化:将多维数组变成一维数组以及push()与concat()区别的讲解...

    数组的扁平化:将多维数组变成一维数组 对于一个像这样的嵌套数组:a=[1,[2,[3,4]],5,6]我们想要把它变成一个一维数组,有下面几种方法: 方法一:递归一 function parseArr ...

  4. 理解bootstrap的列偏移offset 和 推拉push/pull的区别?

    参考: http://www.cnblogs.com/jnslove/p/5430481.html & https://blog.csdn.net/hly_coder/article/deta ...

  5. C++ push_back()和back() 、pop()、push()、emplace() 和 emplace_back()

    1 push_back()和back() 2 push_back()和pop_back( ) 3 push()和pop() 4 emplace() 和 emplace_back() 1 push_ba ...

  6. git push origin master和git push有什么区别?

    2019独角兽企业重金招聘Python工程师标准>>> git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origi ...

  7. push(array)和push([...array])的区别和联系

    在刷力扣时,遇到如下问题: res.push([-path])或者res.push(Array.from(path))得出的结果是正确的,而res.push(path)得到的结果全为空:[ [], [ ...

  8. VUE中数组赋值push与=的区别

    最近做项目时(vue2.0)遇到此坑耗费不少时间,分享如下: data中定义初始结构: data:function(){     return {         optionsArr: [{name ...

  9. git push origin master和git push有什么区别

    git push -u origin master 上面命令将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了. git pu ...

最新文章

  1. 互联网公司职级和薪资一览!
  2. mac 源生安装mysql_Django执行源生mysql语句实现过程解析
  3. 思维修炼之 第三种选择
  4. 【踩坑经历】一次Asp.NET小网站部署踩坑和解决经历
  5. XCODE 出现 The operation couldn't be completed.(LaunchServicesError error 0.)错误修复
  6. XOOPS模块开发快速入门中文翻译(二)
  7. master节点重置后添加node报错_超强教程!在树莓派上构建多节点K8S集群!
  8. 2019-05-18 操作系统概论
  9. Linux私房菜阅读笔记
  10. 【EOS】2.2 发行Token,转移Token
  11. /etc/resolv.conf
  12. 客户关系管理系统中对客户及相关数据的导入导出分析处理
  13. java p39课后答案_面向对象程序设计(JAVA)答案
  14. java interface 传值_前后端分离传值方案-RestfulAPI
  15. 计算广告学中的GFP、GSP和VCG对比
  16. lcx 通过端口转发实现内网穿透
  17. 微型计算机系统有三类总线它们是,《微机原理、汇编语言与接口技术》韩晓茹(习题解答全套...
  18. 颜色匹配 Matlab版本
  19. php论坛搭建,PHP建设论坛:Discuz!论坛快速架设指南
  20. c语言中 输出操作是由库函数,【判断题】在 C语言中,输入操作是由库函数scanf完成,输出操作是由库函数printf完成 。...

热门文章

  1. 一起来找茬:下面这段代码是让计算机在屏幕上输出“hi”。其中有三个错误,快来改正吧
  2. mac使用迅雷下载资源
  3. 大数据分析案例-基于随机森林算法构建新闻文本分类模型
  4. qs与querytring区别
  5. 【CCF会议期刊推荐】CCF推荐国际学术期刊/会议(网络与信息安全)
  6. 2022.03.21飞扬的小鸟
  7. 景深概念以及景深的计算公式
  8. 算法问题:什么是P问题、NP问题和NPC问题zz
  9. 《俊红的数据分析之路》笔记
  10. 输入两个正整数 m 和 k,其中1 < m < 100000,1 < k < 5 ,判断 m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO。