Назад к вопросам
Junior
184
questionbank
Что такое предикат?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Предикат — это функция или объект функции (например, лямбда-выражение), который возвращает булево значение (true или false).
В контексте стандартной библиотеки C++ предикаты часто используются для определения условий в алгоритмах, таких как сортировка, фильтрация или поиск.
Предикаты делятся на:
- Унарные предикаты: принимают один аргумент.
- Бинарные предикаты: принимают два аргумента.
Примеры использования:
#include <vector>
#include <algorithm>
#include <iostream>
// Унарный предикат: проверка на четность
bool is_even(int n) {
return n % 2 == 0;
}
// Бинарный предикат: сравнение на больше
bool is_greater(int a, int b) {
return a > b;
}
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6};
// Использование унарного предиката с std::count_if
int even_count = std::count_if(numbers.begin(), numbers.end(), is_even);
std::cout << "Четных чисел: " << even_count << std::endl;
// Использование бинарного предиката с std::sort
std::sort(numbers.begin(), numbers.end(), is_greater); // Сортировка по убыванию
std::cout << "Отсортированные по убыванию: ";
for (int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// Использование лямбда-предиката (унарный)
auto is_odd = [](int n){ return n % 2 != 0; };
int odd_count = std::count_if(numbers.begin(), numbers.end(), is_odd);
std::cout << "Нечетных чисел: " << odd_count << std::endl;
return 0;
}