在之前的学习中,了解到在STL中,进行插入元素的时候,有insert和push两种选择方式,而在有了右值引用和移动语义的时候,就提出了更高效的插入方法:emplace_back,下面来介绍一下C++11新特性中的emplace_back是怎样的:

先来看一下代码来分析:

#include <vector>
#include <string>
#include <iostream>
using namespace std;
struct Youbain
{string _contry;string _privence;int _number;Youbain(string&& contry, string&& privence, int number):_contry(std::move(contry)), _privence(std::move(privence)), _number(number){cout << "转移构造" << endl;}Youbain(Youbain&& y):_contry(std::move(y._contry)), _privence(std::move(y._privence)), _number(y._number){cout << "转移拷贝" << endl;}Youbain& operator = (const Youbain& y) = default;
}int main()
{vector<Youbain> el;el.emplace_back("China", "Shannxi", 610000);el.push_back(Youbain("China", "Beijing", 10000));
}

在执行emplace_back的时候,只调用了转移构造函数,在插入的时候直接构造,效率更高,减少额外空间的开辟

在执行push_back的时候,调用了构造和拷贝构造函数,因为在使用push_back()向容器中加入一个右值元素(临时对象)时,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题就是临时变量申请资源的浪费。

C++11之emplace_back相关推荐

  1. C++11使用emplace_back代替push_back

    最近在写一段代码的时候,突然很好奇C++11中对push_back有没有什么改进以增加效率,上网搜了一些资料,发现果然新增了emplace_back方法,比push_back的效率要高很多. 首先,写 ...

  2. c++11中emplace_back vs push_back

    引言 在C11中,有两种方法可以把元素放入容器中:emplace_back和push_back. push_back是C11之前就有的,而emplace_back是C11中新加的. 既然它们的作用都是 ...

  3. C++ 中emplace_back和push_back差异

    前言 最近看rocskdb源码,发现了大量的设计模式和C++高级特性,特此补充一下,巩固基础. 问题描述 其中关于动态数组的元素添加,代码中基本将push_back抛弃掉了,全部替换为emplace_ ...

  4. C++容器的选择和详细操作方法总结(有自己总结)

    概述:C++容器是一个功能十分强大的库,利用好了这些容器资源,不仅可以提高书写代码的速度,更重要的是还可以提高代码的健壮性.这篇文章旨在尽可能详细地说明各种容器的优缺点和适用场合以及最重要的就是如何使 ...

  5. 剑指 Offer 57 - II. 和为s的连续正数序列 思考分析

    输入一个正整数 target ,输出所有和为 target 的连续正整数序列(至少含有两个数). 序列内的数字由小到大排列,不同序列按照首个数字从小到大排列. 示例 1: 输入:target = 9 ...

  6. 学习笔记-数据结构与算法之二叉树

    目录 建立 交互式 静态 遍历 递归式 先序 中序 后序 整体代码 非递归 先序 -- 自上而下--- 右子树根节点入栈 整体代码 中序 -- 自下而上--- 当前树根节点入栈 整体代码 后序 传送门 ...

  7. C++控制台贪吃蛇小游戏详细教程

    游戏截图     开始动画:    游戏过程:  游戏架构设计 该游戏的玩法简单,玩家通过键盘方向键控制蛇上下左右移动,吃到食物得分并增长,碰到墙或者自己的身体则死亡,游戏结束.  整个游戏其实就是一 ...

  8. 【C++】经典项目控制台贪吃蛇小游戏详细教程

    [小游戏]贪吃蛇GreedySnake 本文将讲解如何使用c++面向对象方法编写控制台版贪吃蛇小游戏 项目github地址:游戏源码链接 游戏下载:GreedySnake 本人属初学者,水平所限,难免 ...

  9. C++——deque

    文章目录 Deque 与 vector 的异同点 构造操作 非更易型操作 更易型操作 使用例子   容器 deque (发音为"deck")和 vector 非常相似.它也采用dy ...

最新文章

  1. 深度学习Anchor Boxes原理与实战技术
  2. 异步预热在线视频实现
  3. ADO.NET—数据提供程序(连接类)
  4. 多显示器设置检测不到_这台显示器让我欲罢不能:华硕ROG PG279QR 电竞显示器 评测...
  5. 网站推广中的优化雷区作为网站推广专员你了解多少?
  6. 深入浅出Java复用类【从字节码角度看toString调用机制、对象代理、组合与继承、转型、final、初始化】
  7. C++函数指针使用示例
  8. 前端 new实例后销毁实例_后浇带怎么做不漏浆?看个实例
  9. JAVA黑马刘意学习笔记
  10. webrtc系列3——对于stun和turn的理解
  11. 单片机入门必备知识,c语言基础来了
  12. 图片和视频的相互转换
  13. matlab解洛伦兹方程,用MATLAB和Simulink解决微分方程的问题:Lorenz吸引子案例研究【含Matlab代码】...
  14. 一定要学会了解大数据
  15. 欧美html真人游戏,推荐几个好玩场面大的,欧美3d史诗级rpg魔幻手游
  16. matlab绘制凸多面体,科学网—MATLAB中计算凸多边形面积和凸多面体体积的简便方法 - 王福昌的博文...
  17. perl中unicode属性
  18. 基于Ubuntu系统,调用opencv在图片上显示数字和汉字
  19. 北京理工大学 计算机考研真题,北京理工大学考研真题汇总
  20. 深夜复习strcpy函数原型-----竟然暗藏着这么多玄机

热门文章

  1. 渝粤题库 陕西师范大学 《中国法制史》作业
  2. Qt Clion使用飞扬青云的自定义控件
  3. springcloud:微服务涉及哪些技术、有哪些核心组件(二)
  4. mysql导出导入一张表
  5. S270无线物联网数据监测4G RTU功能介绍
  6. CAN FD实战之可变波特率
  7. java导出excel带图片_JAVA的poi实现模版导出excel(带图片).doc
  8. 为什么论文中有的空格特别大
  9. MySQL数据库-表的插入详解
  10. 全球及中国便携式医用制氧机行业研究及十四五规划分析报告