Daily bit(e) C++. std::copy_if, std::remove_copy_if
Добавлено 12 августа 2026 в 12:04
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(), // все элементы
std::back_inserter(dst1), // push_back элементы в dst1
[](int v) { return v % 2 == 0; }); // условие
// dst1 == {2, 4, 6, 8}
std::vector<int> dst2;
std::remove_copy_if(data.begin(), data.end(), // все элементы
std::back_inserter(dst2), // push_back элементы в dst2
[](int v) { return v % 2 == 0; }); // отрицательное условие
// dst2 == {1, 3, 5, 7}
