C++ emplace_back和push_back性能比较

本文探讨了C++中vector的emplace_back和push_back两种插入方法的性能差异。通过理论解释和实践测试,证明了emplace_back利用移动构造函数在插入临时对象时通常比push_back的拷贝构造函数更高效,建议在支持C++11的环境中优先使用emplace_back。
摘要由CSDN通过智能技术生成

概述

从理论上说,右值引用版的emplace_back要比左值引用版的push_back更快一些,因为前者会调用参数的移动构造函数,而后者会调用参数的拷贝构造函数。熟悉这两种构造函数的读者自然明白移动构造函数不需要重新分配内存空间,所以要比拷贝构造函数耗时更少。

实践

一直只是从理论上知道以上的观点,但是并没有实际验证,刚好一个最近回顾以前的一个项目的时候看到了push_back,所以打算写一段代码验证一下这两种vector插入方法的性能优劣。

要测时间性能,先准备一个打印时间的函数:

//函数中用到的数据类型和库函数包含在头文件<sys/time.h>中
//打印微秒级当前时间
static int64_t TimeStampMS(){
   
    struct timeval tv;
    ::gettimeofday(&tv, NULL);
    return tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

这段测试代码的设计思路:从文件中按行读取string类型数据插入到vector中,然后分别打印两种方法(emplace_back和push_back)的耗时时间,对比看哪一种耗时更少。

全部代码:

#include <iostream>
#include <vector>
#include <string&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值