Daily bit(e) C++ #71, Алгоритмы условного копирования: std::copy_if и std::remove_copy_if

Если нам нужно выборочно скопировать элементы из одного диапазона в другой, стандарт предлагает алгоритмы std::copy_if и std::remove_copy_if.

Оба алгоритма принимают предикат, копируя элементы, для которых предикат возвращает true и false соответственно.

#include <vector>
#include <algorithm>
#include <iterator>

std::vector<int> data{1, 2, 3, 4, 5, 6, 7, 8};

std::vector<int> dst1;
std::copy_if(data.begin(), data.end(), // all elements
    std::back_inserter(dst1), // push_back elements into dst1
    [](int v) { return v % 2 == 0; }); // condition
// dst1 == {2, 4, 6, 8}

std::vector<int> dst2;
std::remove_copy_if(data.begin(), data.end(), // all elements
    std::back_inserter(dst2), // push_back elements into dst2
    [](int v) { return v % 2 == 0; }); // negative condition
// dst2 == {1, 3, 5, 7}

Откройте пример в Compiler Explorer.