Napisałem prosty test, żeby sprawdzić o ile szybsza jest operacja emplace_back
od push_back
.
Ku mojemu zdziwieniu wynik to:
push_back: 1048
emplace_back: 1150
Dlaczego tak jest? Kod poniżej.
#include <vector>
#include <iostream>
#include <time.h>
class Foo
{
private:
int x, y;
double z;
public:
Foo(int x, int y, double z) : x(x), y(y), z(z) {}
};
int main()
{
constexpr size_t N = 1000000;
std::vector<Foo> vec;
std::vector<Foo> tab;
vec.reserve(N);
tab.reserve(N);
//PUSH_BACK
clock_t startPush = clock();
for (size_t i = 0; i < N; ++i)
tab.push_back(Foo(4, 2, 1.2));
clock_t stopPush = clock();
std::cout << "push_back: " << stopPush - startPush << std::endl;
//EMPLACE_BACK
clock_t startEmplace = clock();
for (size_t i = 0; i < N; ++i)
vec.emplace_back(4, 2, 1.2);
clock_t stopEmplace = clock();
std::cout << "emplace_back: " << stopEmplace - startEmplace << std::endl;
return 0;
}