std::vector Insertion: emplace_back vs push_back

Question 10 / 51 Correct so far: 0 (0 answered)

Snippet A

Push Back

std::vector<Payload> buildPayloads(int n) {
    std::vector<Payload> v;
    v.reserve(n);
    for (int i = 0; i < n; ++i)
        v.push_back(Payload{i, TAG_TEXT, 'x'});
    return v;
}

std::vector<Payload> v = buildPayloads(kInsertCount);
Snippet B

Emplace Back

std::vector<Payload> buildPayloads(int n) {
    std::vector<Payload> v;
    v.reserve(n);
    for (int i = 0; i < n; ++i)
        v.emplace_back(i, TAG_TEXT, 'x');
    return v;
}

std::vector<Payload> v = buildPayloads(kInsertCount);
Shared test data (shared-setup)
struct Payload {
    std::array<char, 2048> data;
    std::string tag;
    int id;
    Payload(int i, const std::string& t, char fill) : tag(t), id(i) { data.fill(fill); }
};

constexpr int kInsertCount = 16;
static const std::string TAG_TEXT = "payload-tag-for-vector-benchmark";

Which snippet is faster?

Select the correct answer(s)