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.

Daily bit(e) C++

Если нам нужно выборочно копировать элементы из одного диапазона в другой, стандарт предлагает алгоритмы 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}

Пример на Compiler Explorer

Теги

C++ / CppDaily bit(e) C++Программирование