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

2023-11-11

@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);//开辟capacity
    for(int i=0;i<10;i++){
        vec.push_back(i); //调用了10次构造函数和10次拷贝构造函数,
//        vec.emplace_back(i);  //调用了10次构造函数一次拷贝构造函数都没有调用过
    }
}

在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 左耳朵耗子:拖累开发团队效率的困局与解决之道

    作者 陈皓编辑 小智影响软件开发团队效率的因素有许多 产品和业务上的效率问题固然是根本 但很多时候 这种问题并没有解 如果只从软件开发的过程出发 哪些开发方式是典型 又该怎么解呢 写在前面 我之前写过一篇叫 加班与效率 的文章 从概念上说了

随机推荐

  • outlook中打开链接时收到错误信息

    http helpdesk blog 51cto com 219783 233525 症状 outlook中打开链接时收到错误信息 一般性错误 http 找不到应用程序 原因 IE非默认浏览器 解决方法 打开任意文件夹 工具 文件夹选项 文
  • 【python】—— python的基本介绍并附安装教程

    前言 今天 我将给大家讲解关于python的基本知识 让大家对其有个基本的认识并且附上相应的安装教程以供大家参考 接下来 我们正式进入今天的文章 目录 前言 一 Python 背景知识 二 Python 都能干啥 三 Python的优缺点
  • 判断一个数是否为素数之费马测试

    费马测试被称为概率性素性测试 它判断的是 某个数是素数的概率大不大 如果P为素数 那么所有比P小的数Q都满足公式 QP mod P Q 即 例素数5的性质 比素数5小的数有4 3 2 1 那么 45 45 1024 mod 5 4 35 3
  • 电脑性能,如何提高电脑性能 方法介绍【图文教程】

    在这个信息传播飞速的当下 网络是人们必不可少的传播工具 网络传播信息的途径就是通过电脑 电脑如今已经是每家每户的宠儿了 几乎每个人都有自己的电脑 然而电脑与电脑之间也有差异 它们最大的不同就是性能方面 影响性能的主要因素是硬件 当然还有其它
  • C#学习教程六

    C 异常机制具有如下的特征 1 所有异常必须用System Exception类或者从System Exception派生的类实例来标识 2 可以使用fianlly块编写在正常执行或异常情况下都要执行的终止代码 3 系统级的异常如移除 被零
  • keepalived双主模式(互为主备)

    考虑到keepalived高可用 备节点的机器基本上属于空闲状态 很浪费硬件资源 所以我们可以让keepalived互为主备 跑多个实例 第一个节点配置 vim etc keepalived keepalived conf global d
  • Qt中Udp通信、Udp广播和组播(QT七)

    目录 一 UDP通信 1 Qt中udp通信QUdpSocket 1 发送端 2 接收端 2 Udp通信广播 1 app端UdpApp 2 控制器端UdpControl 3 Udp通信组播 1 组播发送端 2 组播接收端 3 如果要接收组播数
  • 华为服务器bios中修改磁盘格式,华为服务器设置bios

    华为服务器设置bios 内容精选 换一换 通过在BIOS中设置一些高级选项 可以有效提升虚拟化平台性能 表1列出了TaiShan服务器和性能相关的BIOS推荐配置项 开启CPU预取配置选项的目的在于CPU先行提取下一段指令以提高系统效能 在
  • pthread的互斥量和自旋锁

    一 自旋锁与互斥量的区别 在多处理器环境中 自旋锁最多只能被一个可执行线程持有 如果一个可执行线程试图获得一个被争用 已经被持有的 自旋锁 那么该线程就会一直进行忙等待 自旋 也就是空转 等待锁重新可用 如果锁未被争用 请求锁的执行线程便立
  • Vue3安装配置、开发环境搭建(组件安装卸载)(图文详细)

    Vue3安装配置 开发环境搭建 组件安装卸载 图文详细 本文目录 一 vue的主要安装使用方式 二 node js安装和配置 1 支持运行 Node js的平台 2 Node js 版本开发发布时间表 日期可能会有变化 3 下载安装node
  • qt5.15 快速安装 国内源

    1 qt5 15 安装问题 最大的问题就是需要在线下载与安装 即使挂了科学上网 国外的服务器下载速度也还是超级慢 在网上找了各种解决办法后 终于找到一个快速下载安装的办法 2 安装器下载 阿里源 清华源都没有Windows的安装器了 在腾讯
  • 机器学习实战——第五章(分类):Logistic回归

    前言 首先感谢博主 Jack Cui 主页 http blog csdn net c406495762 Logistic回归博文地址 https blog csdn net c406495762 article details 777233
  • 分布式系统服务器要求,浅谈分布式系统

    分布式系统的由来 软件系统的架构一直以来随着技术的发展和市场的需求进行着不断的演进 最初 各行业业务相对比较简单 对系统的要求也不高 软件系统的架构均采用单一应用架构 此时单台服务器即可满足系统的要求 之后 随着业务的发展 对系统的要求不断
  • Codeblocks的安装与配置

    Hello 大家好 欢迎大家来到编程世界 从现在开始 我将和大家一起走进代码王国 既然我们出来混社会 哦不 是来新世界闯荡 我们至少应该先选一把 神兵利器 来防身嘛 在一些高校的电脑室里 你可能会看见下面这款经典软件 没错 VC 6 0 额
  • Linux redis 主从复制,从服务器一直显示master_link_status:down

    Linux redis 主从复制 从服务器一直显示master link status down 这里初步的解决方案是权限不足 切换成root 就可以解决了
  • vscode无法在只读编辑器中输入

    在设置中搜索run code config 将run in terminal打勾即可
  • 学点Selenium玩点新鲜~新的一年,让分布式测试有更多玩法

    我们都知道 Selenium 是一款在 Web 应用测试领域使用的自动化测试工具 而 Selenium Grid 是 Selenium 中的一大组件 通过它能够实现分布式测试 能够帮助团队简单快速在不同的环境中测试他们的 Web 应用 分布
  • 详细介绍如何在linux中配置chisel环境

    一 安装java和scala 1 安装java 安装java sudo apt install openjdk 11 jre headless 安装javac sudo apt install openjdk 11 jdk headless
  • ubuntu 18.04 RTX2080(ti) --- tensorflow-gpu + cuda9.0 + cudnn-9.0 (ubuntu 16.04, TITAN XP)

    0 下载display driver cuda和cudnn RTX2080 Display Driver cuda cudnn 版本对应关系 1 禁止系统默认的显卡驱动 打开系统黑名单 sudo gedit etc modprobe d b
  • C++11新特性,推荐使用emplace_back()替换push_back()的原因

    TOC c 11新加入了emplace back 用来替换push back 在平时我们习惯性的尾插用push back 去完成 但是如果是尾插临时对象的话 push back 需要先构造临时对象 再将这个对象拷贝到容器的末尾 而empla