Пространства имён
Варианты
Действия

std::all_of, std::any_of, std::none_of

Материал из cppreference.com
< cpp‎ | algorithm
 
 
Библиотека алгоритмов
Ограниченные алгоритмы и алгоритмы над диапазонами(C++20)
Ограниченные алгоритмы, например ranges::copy, ranges::sort, ...
Политики исполнения (C++17)
Немодифицирующие операции над последовательностями
all_ofany_ofnone_of
(C++11)(C++11)(C++11)
(C++17)
Модифицирующие операции над последовательностями
Операции разбиения
Операции сортировки
Операции двоичного поиска
Операции с наборами (в отсортированных диапазонах)
Операции с кучей
(C++11)
Операций минимума/максимума
(C++11)
(C++17)

Операции перестановки
Числовые операции
Операции с неинициализированной памятью
(C++17)
(C++17)
(C++17)
Библиотека C
 
Определено в заголовочном файле <algorithm>
template<class InputIt, class UnaryPredicate >
bool all_of( InputIt first, InputIt last, UnaryPredicate p );
(1) (начиная с C++11)
template<class InputIt, class UnaryPredicate >
bool any_of( InputIt first, InputIt last, UnaryPredicate p );
(2) (начиная с C++11)
template<class InputIt, class UnaryPredicate >
bool none_of( InputIt first, InputIt last, UnaryPredicate p );
(3) (начиная с C++11)
1) Проверяет, что предикат p возвращает значение true для всех элементов в диапазоне [first, last).
2) Проверяет, что предикат p возвращает значение true для хотя бы одного элемента в диапазоне [first, last).
3) Проверяет, что предикат p не возвращает значение true ни для одного элемента в диапазоне [first, last).

Содержание

[править]Параметры

[firstlast) два итератора задающих диапазон элементов для проверки
p унарный предикат.

Определение функции предиката должно быть эквивалентно следующему:

 bool pred(const Type &a);

Присутствие const& в определении не обязательно, но функция не должна модифицировать передаваемые ей объекты.
Тип Type должен быть таков, что объект типа InputIt может быть разыменован и затем неявно преобразован в Type. ​

Требования к типам
-
InputIt должен соответствовать требованиям InputIterator.
-
UnaryPredicate должен соответствовать требованиям Predicate.

[править]Возвращаемое значение

1)true, если унарный предикат возвращает true для всех элементов в диапазоне, иначе false. Возвращает true, если диапазон пуст.
2)true, если унарный предикат возвращает true для хотя бы одного элемента в диапазоне, иначе false. Возвращает false, если диапазон пуст.
3)true, если унарный предикат не возвращает true ни для одного элемента в диапазоне, иначе false. Возвращает true, если диапазон пуст.

[править]Сложность

Не больше last - first применений предиката.

[править]Возможная реализация

Первый вариант
template<class InputIt, class UnaryPredicate >bool all_of(InputIt first, InputIt last, UnaryPredicate p){for(; first != last;++first){if(!p(*first))returnfalse;}returntrue;}
Второй вариант
template<class InputIt, class UnaryPredicate >bool any_of(InputIt first, InputIt last, UnaryPredicate p){for(; first != last;++first){if(p(*first))returntrue;}returnfalse;}
Третий вариант
template<class InputIt, class UnaryPredicate >bool none_of(InputIt first, InputIt last, UnaryPredicate p){for(; first != last;++first){if(p(*first))returnfalse;}returntrue;}

[править]Пример

#include <vector>#include <numeric>#include <algorithm>#include <iterator>#include <iostream>#include <functional>   int main(){std::vector<int> v(10, 2);std::partial_sum(v.cbegin(), v.cend(), v.begin());std::cout<<"Среди чисел: ";std::copy(v.cbegin(), v.cend(), std::ostream_iterator<int>(std::cout, " "));std::cout<<'\n';   if(std::all_of(v.cbegin(), v.cend(), [](int i){return i %2==0;})){std::cout<<"Все числа чётные\n";}if(std::none_of(v.cbegin(), v.cend(), std::bind(std::modulus<int>(), std::placeholders::_1, 2))){std::cout<<"Ни одно из них не нечётное\n";}struct DivisibleBy {constint d; DivisibleBy(int n): d(n){}bool operator()(int n)const{return n % d ==0;}};   if(std::any_of(v.cbegin(), v.cend(), DivisibleBy(7))){std::cout<<"По крайней мере одно из чисел делится на 7\n";}}

Вывод:

Среди чисел: 2 4 6 8 10 12 14 16 18 20 Все числа чётные Ни одно из них не нечётное По крайней мере одно из чисел делится на 7

close