函数原型:

template <class... Args>void emplace_back (Args&&... args);

在容器尾部添加一个元素,这个元素原地构造,不需要触发拷贝构造和转移构造。而且调用形式更加简洁,直接根据参数初始化临时对象的成员。
给出一个示例,这个示例很有用。

#include <vector>
#include <string>
#include <iostream>  struct President
{  std::string name;  std::string country;  int year;  President(std::string p_name, std::string p_country, int p_year)  : name(std::move(p_name)), country(std::move(p_country)), year(p_year)  {  std::cout << "I am being constructed.\n";  }President(const President& other): name(std::move(other.name)), country(std::move(other.country)), year(other.year){std::cout << "I am being copy constructed.\n";}President(President&& other)  : name(std::move(other.name)), country(std::move(other.country)), year(other.year)  {  std::cout << "I am being moved.\n";  }  President& operator=(const President& other);
};  int main()
{  std::vector<President> elections;  std::cout << "emplace_back:\n";  elections.emplace_back("Nelson Mandela", "South Africa", 1994); //没有类的创建  std::vector<President> reElections;  std::cout << "\npush_back:\n";  reElections.push_back(President("Franklin Delano Roosevelt", "the USA", 1936));  std::cout << "\nContents:\n";  for (President const& president: elections) {  std::cout << president.name << " was elected president of "  << president.country << " in " << president.year << ".\n";  }  for (President const& president: reElections) {  std::cout << president.name << " was re-elected president of "  << president.country << " in " << president.year << ".\n";  }}

输出

emplace_back:
I am being constructed.push_back:
I am being constructed.
I am being moved.Contents:
Nelson Mandela was elected president of South Africa in 1994.
Franklin Delano Roosevelt was re-elected president of the USA in 1936.

emplace_back()相关推荐

  1. C++ 中emplace_back和push_back差异

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

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

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

  3. push_back()和emplace_back()函数

    参考原文:http://c.biancheng.net/view/6826.html 要知道,向 vector 容器中添加元素的唯一方式就是使用它的成员函数,如果不调用成员函数,非成员函数既不能添加也 ...

  4. push_back和emplace_back的区别

    在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...

  5. emplace_back和push_back区别

    #include <vector>  #include <iostream>  using namespace std; class testDemo { public:    ...

  6. push_back还是emplace_back?

    背景和区别 emplace_back() 是 C++11 之后,vector容器中添加的新方法,和 push_back()一样,都是在容器末尾添加一个新的元素,相对于push_back函数,它减少了一 ...

  7. push_back、emplace_back、std::move

    1.push_back和emplace_back的区别 emplace_back() 和 push_back() 的区别: 就在于底层实现的机制不同.push_back() 向容器尾部添加元素时,首先 ...

  8. C++:vector的push_back()与emplace_back()

    在STL中,向vector容器添加元素的函数有2个:push_back().emplace_back() 1.push_back() 在vector容器尾部添加一个元素,用法为: arr.push_b ...

  9. 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 ...

  10. C++11介绍之vector::push_back和vector::emplace_back区别

    vector::push_back和vector::emplace_back区别 emplace_back() 和 push_back() 功能上类似,但底层实现机制是不同的.push_back() ...

最新文章

  1. python开发环境spyder_spyder python 2.7-spyder(Python开发环境)下载 v2.1.10官方版--pc6下载站...
  2. 灵活而又可怕的params参数数组
  3. Java实现读取pdf文件内容(how to read pdf in java)
  4. 入门Web前端有哪些误区?该如何避免?
  5. php active控件,php – 使用TbActiveForm选择列表中的动态选项
  6. 在VC中动态加载ODBC的方法
  7. php获取扫码枪的数据,js 获取扫码枪输入数据的方法
  8. matlab3d绘图实例,matlab各种三维绘图及实例
  9. win10解压软件哪个好(win10用哪个解压软件)
  10. firefox 网页无法播放视频问题
  11. 照片宽高比怎么设置_【经验分享】照片处理
  12. 双11,移动电商如何更好地吸引女性购物?
  13. 如何求一个平面区域中心点问题--编程实现
  14. 浅谈金融数据中心的消防安全
  15. 基于CNN的动态手势识别:Real-time Hand Gesture Detection and Classification Using Convolutional Neural Networks
  16. 鬼知道我昨晚经历了什么......
  17. egg(九):下载excel文件,前后端
  18. 国内外研究现状和发展趋势
  19. 腾讯qq珊瑚虫版_时隔多年,腾讯再次上线 Linux 版 QQ !
  20. 深度学习中的经典基础网络结构(backbone)总结

热门文章

  1. XigmaNas系统(二):蜗牛星际安装Xigmanas(Nas4Free)
  2. 阿里孤尽:Code Review 是一场苦涩但有意思的修行
  3. 面板显示技术:LCD与OLED
  4. C++静态成员函数与静态成员变量
  5. 双天线和差测角matlab / FPGA开发
  6. 教你快速高效接入SDK——SDK接入抽象层的设计
  7. [收藏] Javascript Keycode表
  8. springboot+个人博客 毕业设计-附源码191613
  9. web概念介绍、软件架构、静态资源
  10. 作业一:我与软件工程相约