我有点困惑有关之间的差异push_back和emplace_back.
void emplace_back(Type&& _Val);
void push_back(const Type& _Val);
void push_back(Type&& _Val);
Run Code Online (Sandbox Code Playgroud)
因为有一个push_back超载采用右值参考我不太明白目的是emplace_back什么?
emplace_back做以下事情时,我认为这将是胜利者:
v.push_back(myClass(arg1, arg2));
Run Code Online (Sandbox Code Playgroud)
因为emplace_back会在向量中立即构造对象,而push_back首先会构造一个匿名对象,然后将其复制到向量中.有关更多信息,请参阅此问
我决定将它们与一个由整数填充的向量进行比较.
这是实验代码:
#include <iostream>
#include <vector>
#include <ctime>
#include <ratio>
#include <chrono>
using namespace std;
using namespace std::chrono;
int main() {
vector<int> v1;
const size_t N = 100000000;
high_resolution_clock::time_point t1 = high_resolution_clock::now();
for(size_t i = 0; i < N; ++i)
v1.push_back(i);
high_resolution_clock::time_point t2 = high_resolution_clock::now();
duration<double> time_span = duration_cast<duration<double>>(t2 - t1);
std::cout << "push_back took me " << time_span.count() << " seconds.";
std::cout << …Run Code Online (Sandbox Code Playgroud)