概述
从理论上说,右值引用版的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&