C++11新特性,推荐使用emplace_back()替换push_back()的原因
@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()的原因相关推荐
- C++11新特性选讲 语言部分 侯捷
C++11新特性选讲 语言部分 侯捷 本课程分为两个部分:语言的部分和标准库的部分.只谈新特性,并且是选讲. 本文为语言部分笔记. 语言 Variadic Templates move semanti ...
- 详谈C++11新特性之future及开源项目ananas(folly,std c++11和ananas的future各自的区别是?)
一.前言 1.最早我是从微信公众号看到这篇文章的,了解到开源项目ananas(A C++11/golang protobuf RPC framework)实现了Linux高性能网络库和rpc功能,里面 ...
- C++11新特性之新类型与初始化
C++11新特性之新类型与初始化 snoone | 2016-06-23 11:57 浏览量(148) 评论(0) 推荐(0) 数据 这是C++11新特性介绍的第一部分,比较简单易懂, ...
- java9特性_96.java基础10(java9/10/11新特性)
126.java 9 新特性1(模块化功能): 1.java模块化 2.java 交互式环境jshell 3.泛型 package com.atguigu.java; import org.junit ...
- c++11新特性_【C++11新特性】 C++11智能指针之weak_ptr
如题,我们今天要讲的是 C++11 引入的三种智能指针中的:weak_ptr. 在学习 weak_ptr 之前最好对 shared_ptr 有所了解.如果你还不知道 shared_ptr 是何物,可以 ...
- 【C/C++】C++98基础上的C++11新特性
一.新语法 1.自动类型推导auto auto的自动推导,用于从初始化表达式中推断出变量的数据类型. //C++98 int a = 10; string s = "abc"; f ...
- C++11新特性(原封不动转载待查)
C++11标准发布已有一段时间了, 维基百科上有对C++11新标准的变化和C++11新特性介绍的文章. 我是一名C++程序员,非常想了解一下C++11. 英文版的维基百科看起来非常费劲,而中文版维基百 ...
- COSMIC的后端学习之路——2.1 C++11新特性(1)
2.1 C++11新特性(1) 知识树 1.智能指针 (1)std::shared_ptr:共享的智能指针 ①初始化 ②获取原始指针 ③指定删除器(自定义删除对象) ④一些错误用法 (2)std::u ...
- C++11新特性之十一:emplace
emplace操作是C++11新特性,新引入的的三个成员emplace_front.emplace 和 emplace_back.这些操作构造而不是拷贝元素到容器中,这些操作分别对应push_fron ...
- C++11新特性之nullptr
在C++11之前的C++98/03我们使用空都是NULL关键字,后来C++11之后新增了nullptr关键字来表示空.那么有了NULL还要弄个nullptr出来干什么呢?是不是吃太饱了? 为了来剖析这 ...
最新文章
- Linux的僵尸进程及其解决方法(转)
- 多篇顶会看个体因果推断(ITE)的前世今生
- pycharm使用import numpy报错
- 机器学习第七篇:详解EM算法
- WSAAsyncSelect() 非阻塞模式WinSock
- 人脸关键点: DCNN-Deep Convolutional Network Cascade for Facial Point Detection
- 【React Native 安卓开发】----(View实战之仿携程)【第三篇】
- Android studio中的一次编译报错’Error:Execution failed for task ':app:transformClassesWithDexForDebug‘,困扰了两天
- ranger文件管理器修改默认文本编辑器为vim
- eNsp——Vlan
- ubuntu 安装gnome3
- 六级考研单词之路-二十二
- uwb最详细的DS-TWR测距
- php技术面试成功后试岗,6.3公里“阅读静安”光音栈桥“会唱歌”
- 如何批量生成JAN13条码
- neo4j-ogm-core使用小记
- CentOS7 安装 RabbitMQ 3.6(方法适用于安装任意版本 RabbitMQ)
- 根据经纬度判断车辆是否进度电子围栏
- Revit (3) - 二开 -创建柱子
- 迅游科技遭遇瓶颈 购网安资产谋求多元化