РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
369 of 815 menu

Функция copy_if

Функция copy_if копирует элементы из исходного диапазона в целевой диапазон, но только те, которые удовлетворяют заданному условию. В первый параметр мы передаем итератор начала исходного диапазона, во второй - итератор конца исходного диапазона, в третий - итератор начала целевого диапазона, а в четвертый - предикат (функцию или лямбду), которая возвращает true для копируемых элементов.

Синтаксис

template <class InputIterator, class OutputIterator, class UnaryPredicate> OutputIterator copy_if(InputIterator first, InputIterator last, OutputIterator result, UnaryPredicate pred);

Пример

Давайте скопируем из вектора src только четные числа в вектор res:

#include <iostream> #include <vector> #include <algorithm> using namespace std; int main() { vector<int> src = {1, 2, 3, 4, 5}; vector<int> res(src.size()); auto it = copy_if(src.begin(), src.end(), res.begin(), [](int n) { return n % 2 == 0; }); res.resize(it - res.begin()); for (int n : res) { cout << n << " "; } cout << endl; return 0; }

Результат выполнения кода:

2 4

Пример

Давайте скопируем из вектора строк только те, которые начинаются с символа 'a':

#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; int main() { vector<string> src = {"abcde", "12345", "apple", "banana"}; vector<string> res(src.size()); auto it = copy_if(src.begin(), src.end(), res.begin(), [](const string& s) { return s[0] == 'a'; }); res.resize(it - res.begin()); for (const string& s : res) { cout << s << " "; } cout << endl; return 0; }

Результат выполнения кода:

"abcde" "apple"

Смотрите также

  • функция copy,
    которая копирует элементы диапазона
  • функция copy_n,
    которая копирует заданное количество элементов
  • функция remove_if,
    которая удаляет элементы по условию
  • функция find_if,
    которая ищет элемент по условию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить