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.