@TOC

c++11新加入了emplace_back()用来替换push_back():

在平时我们习惯性的尾插用push_back()去完成,但是如果是尾插临时对象的话,push_back()需要先构造临时对象,再将这个对象拷贝到容器的末尾,而emplace_back()则直接在容器的末尾构造对象,这样就省去了拷贝的过程。

分析如下代码:

#include<bits/stdc++.h>
using namespace std;
int i=0,j=0;
class A {public:A(int i){str = to_string(i);cout << "构造函数" <<++i<< endl; }~A(){}A(const A& a): str(a.str){cout << "拷贝构造" <<++j<< endl;}public:string str;
};int main(){vector<A> vec;vec.reserve(10);//开辟capacityfor(int i=0;i<10;i++){vec.push_back(i); //调用了10次构造函数和10次拷贝构造函数,
//        vec.emplace_back(i);  //调用了10次构造函数一次拷贝构造函数都没有调用过}
}


C++11新特性,推荐使用emplace_back()替换push_back()的原因相关推荐

  1. C++11新特性选讲 语言部分 侯捷

    C++11新特性选讲 语言部分 侯捷 本课程分为两个部分:语言的部分和标准库的部分.只谈新特性,并且是选讲. 本文为语言部分笔记. 语言 Variadic Templates move semanti ...

  2. 详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)

    一.前言 1.最早我是从微信公众号看到这篇文章的,了解到开源项目ananas(A C++11/golang protobuf RPC framework)实现了Linux高性能网络库和rpc功能,里面 ...

  3. C++11新特性之新类型与初始化

    C++11新特性之新类型与初始化 snoone | 2016-06-23 11:57    浏览量(148)    评论(0)   推荐(0) 数据 这是C++11新特性介绍的第一部分,比较简单易懂, ...

  4. java9特性_96.java基础10(java9/10/11新特性)

    126.java 9 新特性1(模块化功能): 1.java模块化 2.java 交互式环境jshell 3.泛型 package com.atguigu.java; import org.junit ...

  5. c++11新特性_【C++11新特性】 C++11智能指针之weak_ptr

    如题,我们今天要讲的是 C++11 引入的三种智能指针中的:weak_ptr. 在学习 weak_ptr 之前最好对 shared_ptr 有所了解.如果你还不知道 shared_ptr 是何物,可以 ...

  6. 【C/C++】C++98基础上的C++11新特性

    一.新语法 1.自动类型推导auto auto的自动推导,用于从初始化表达式中推断出变量的数据类型. //C++98 int a = 10; string s = "abc"; f ...

  7. C++11新特性(原封不动转载待查)

    C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...

  8. COSMIC的后端学习之路——2.1 C++11新特性(1)

    2.1 C++11新特性(1) 知识树 1.智能指针 (1)std::shared_ptr:共享的智能指针 ①初始化 ②获取原始指针 ③指定删除器(自定义删除对象) ④一些错误用法 (2)std::u ...

  9. C++11新特性之十一:emplace

    emplace操作是C++11新特性,新引入的的三个成员emplace_front.emplace 和 emplace_back.这些操作构造而不是拷贝元素到容器中,这些操作分别对应push_fron ...

  10. C++11新特性之nullptr

    在C++11之前的C++98/03我们使用空都是NULL关键字,后来C++11之后新增了nullptr关键字来表示空.那么有了NULL还要弄个nullptr出来干什么呢?是不是吃太饱了? 为了来剖析这 ...

最新文章

  1. Linux的僵尸进程及其解决方法(转)
  2. 多篇顶会看个体因果推断(ITE)的前世今生
  3. pycharm使用import numpy报错
  4. 机器学习第七篇:详解EM算法
  5. WSAAsyncSelect() 非阻塞模式WinSock
  6. 人脸关键点: DCNN-Deep Convolutional Network Cascade for Facial Point Detection
  7. 【React Native 安卓开发】----(View实战之仿携程)【第三篇】
  8. Android studio中的一次编译报错’Error:Execution failed for task ':app:transformClassesWithDexForDebug‘,困扰了两天
  9. ranger文件管理器修改默认文本编辑器为vim
  10. eNsp——Vlan
  11. ubuntu 安装gnome3
  12. 六级考研单词之路-二十二
  13. uwb最详细的DS-TWR测距
  14. php技术面试成功后试岗,6.3公里“阅读静安”光音栈桥“会唱歌”
  15. 如何批量生成JAN13条码
  16. neo4j-ogm-core使用小记
  17. CentOS7 安装 RabbitMQ 3.6(方法适用于安装任意版本 RabbitMQ)
  18. 根据经纬度判断车辆是否进度电子围栏
  19. Revit (3) - 二开 -创建柱子
  20. 迅游科技遭遇瓶颈 购网安资产谋求多元化

热门文章

  1. VS 2019Xamarin开发Android App生成apk文件
  2. 大哥都是从小弟做起的
  3. cdr宏教程_cdr软件怎么使用宏批量导出文件?
  4. 在ubuntu 的QT中不能使用搜狗输入法
  5. 根据银行卡号获取开户行和银行LOGO
  6. 金阊oracle服务器,配置 KDC 服务器
  7. python中无法安装xpath库,Python爬虫 | xpath的安装
  8. netty内存-PoolSubpage分析
  9. Windows下获取本地IP地址的两种方法
  10. 小熊派LiteOS移植LVGL