emplace_back()
函数原型:
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()相关推荐
- C++ 中emplace_back和push_back差异
前言 最近看rocskdb源码,发现了大量的设计模式和C++高级特性,特此补充一下,巩固基础. 问题描述 其中关于动态数组的元素添加,代码中基本将push_back抛弃掉了,全部替换为emplace_ ...
- C++_可变参数模板到emplace_back再到construct再到forward
C++_可变参数模板到emplace_back再到construct再到forward 1.可变参数模板 具体定义如下图所示: 编写一个可变参数版本: 1.1sizeof-运算符 2.emplace_ ...
- push_back()和emplace_back()函数
参考原文:http://c.biancheng.net/view/6826.html 要知道,向 vector 容器中添加元素的唯一方式就是使用它的成员函数,如果不调用成员函数,非成员函数既不能添加也 ...
- push_back和emplace_back的区别
在引入右值引用,转移构造函数,转移复制运算符之前,通常使用push_back()向容器中加入一个右值元素(临时对象)的时候,首先会调用构造函数构造这个临时对象,然后需要调用拷贝构造函数将这个临时对象放 ...
- emplace_back和push_back区别
#include <vector> #include <iostream> using namespace std; class testDemo { public: ...
- push_back还是emplace_back?
背景和区别 emplace_back() 是 C++11 之后,vector容器中添加的新方法,和 push_back()一样,都是在容器末尾添加一个新的元素,相对于push_back函数,它减少了一 ...
- push_back、emplace_back、std::move
1.push_back和emplace_back的区别 emplace_back() 和 push_back() 的区别: 就在于底层实现的机制不同.push_back() 向容器尾部添加元素时,首先 ...
- C++:vector的push_back()与emplace_back()
在STL中,向vector容器添加元素的函数有2个:push_back().emplace_back() 1.push_back() 在vector容器尾部添加一个元素,用法为: arr.push_b ...
- 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 ...
- C++11介绍之vector::push_back和vector::emplace_back区别
vector::push_back和vector::emplace_back区别 emplace_back() 和 push_back() 功能上类似,但底层实现机制是不同的.push_back() ...
最新文章
- python开发环境spyder_spyder python 2.7-spyder(Python开发环境)下载 v2.1.10官方版--pc6下载站...
- 灵活而又可怕的params参数数组
- Java实现读取pdf文件内容(how to read pdf in java)
- 入门Web前端有哪些误区?该如何避免?
- php active控件,php – 使用TbActiveForm选择列表中的动态选项
- 在VC中动态加载ODBC的方法
- php获取扫码枪的数据,js 获取扫码枪输入数据的方法
- matlab3d绘图实例,matlab各种三维绘图及实例
- win10解压软件哪个好(win10用哪个解压软件)
- firefox 网页无法播放视频问题
- 照片宽高比怎么设置_【经验分享】照片处理
- 双11,移动电商如何更好地吸引女性购物?
- 如何求一个平面区域中心点问题--编程实现
- 浅谈金融数据中心的消防安全
- 基于CNN的动态手势识别:Real-time Hand Gesture Detection and Classification Using Convolutional Neural Networks
- 鬼知道我昨晚经历了什么......
- egg(九):下载excel文件,前后端
- 国内外研究现状和发展趋势
- 腾讯qq珊瑚虫版_时隔多年,腾讯再次上线 Linux 版 QQ !
- 深度学习中的经典基础网络结构(backbone)总结