Removing Elements from a Vector: Two Approaches

Question 1 / 17 Correct so far: 0 (0 answered)

Snippet A

Manual Erase

void removeEvens(std::vector<int>& v) {
    for (auto it = v.begin(); it != v.end(); ) {
        if (*it % 2 == 0)
            it = v.erase(it);
        else
            ++it;
    }
}

auto v = DATA;
removeEvens(v);
Snippet B

Erase Remove

void removeEvens(std::vector<int>& v) {
    v.erase(
        std::remove_if(v.begin(), v.end(), [](int x) { return x % 2 == 0; }),
        v.end()
    );
}

auto v = DATA;
removeEvens(v);
Shared test data (shared-setup)
// 10 000 integers [0, 9999]; even values (every other element) are removed.
static const std::vector<int> DATA = []() {
    std::vector<int> v(10'000);
    std::iota(v.begin(), v.end(), 0);
    return v;
}();

Which snippet is faster?

Select the correct answer(s)