Spec-Zone.ru › C++

Именованные требования C++: Предикат

Требования Predicate описывают вызываемый объект, который возвращает значение BooleanTestable.

Предикат обычно используется с алгоритмами, которые принимают входные данные (отдельные объекты/контейнеры) и предикат, вызываемый для входных данных, чтобы определить дальнейшие действия. Примеры использования предикатов в стандартной библиотеке C++:

  • std::all_of, std::any_of, std::none_of Принимают массив элементов и предикат в качестве входных данных. Вызывают предикат для отдельных входных элементов и возвращают true, если предикат возвращает true для всех/любых/ни одного из элементов.
  • std::find_if Принимает последовательность элементов и предикат. Возвращает первый элемент последовательности, для которого предикат возвращает значение, равное true.

Приведённое выше описание возможностей алгоритмов является упрощённым и предназначено для объяснения понятия «Предикат» простыми словами. Подробную информацию см. на страницах соответствующих алгоритмов.

Иными словами, если алгоритм принимает предикат pred и итератор first, он должен иметь возможность проверить объект типа, на который указывает итератор first, используя заданный предикат с помощью конструкции вида if (pred(*first)) { /*...*/ }.

Функциональный объект pred не должен вызывать никаких неконстантных функций через разыменованный итератор и должен принимать аргумент const, ведя себя одинаково независимо от того, является ли аргумент const или не-const. Этим функциональным объектом может быть указатель на функцию или объект типа с подходящим оператором вызова функции.

Требования

  • Функциональный объект

Отчёты об ошибках

Следующие отчёты об ошибках, изменяющие поведение, были ретроактивно применены к ранее опубликованным стандартам C++.

Отчёт об ошибке Применяется к Опубликованное поведение Правильное поведение
LWG 3031 C++98 требования к значениям const были недостаточными требования усилены

См. также

predicate
(C++20)
указывает, что вызываемый тип является булевым предикатом
(концепт)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/named_req/Predicate

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API