前言
一直以来写代码,vector想都没想就是push_back,今天发现的C++11的emplace_back碾压了传统的push_back
总结一句话:Life is short, use emplace_back()。
简单叙述原因:emplace_back可以“同时构造和插入,一次搞定”,push_back需要“先构造,后插入,而且插入的时候还伴随着拷贝或者移动”。
Talk is cheap, show me the code
#include <iostream>
#include <utility>
#include <chrono>
#include <vector>
#include <string>
using namespace std;
using namespace chrono;
int main()
{
vector<string> v;
int num = 100000;
v.reserve(num); // capacity 一次性增大到十万,减少vector多次增大时候的拷贝次数
cout << "push_back way one: ";
auto start = system_clock::now();
for (int i = 0; i < num; ++i)
{
string temp("caitao");
v.push_back(temp); // push_back(const string&),参数是左值引用
}
auto end = system_clock::now();
auto duration = duration_cast<microseconds>(end - start);
cout << duration.count() << " microseconds." << endl << endl;
cout << "push_back way two: ";
v.clear();
start = system_clock::now();
for (int i = 0; i < num; ++i)
{
string temp("caitao");
v.push_back(move(temp)); // push_ba