Ответ 1
Сам стандарт не ставит такого жесткого требования. Но можно сделать вывод, что это косвенно поощряется ([alg.any_of]):
template <class InputIterator, class Predicate> bool any_of(InputIterator first, InputIterator last, Predicate pred); template <class ExecutionPolicy, class ForwardIterator, class Predicate> bool any_of(ExecutionPolicy&& exec, ForwardIterator first, ForwardIterator last, Predicate pred);
Возвращает: false, если [первый, последний] пуст или нет итератора я в диапазоне [first, last], для которого pred (* i) истинно, и true в противном случае.
Сложность: самое последнее - первые применения предиката.
В то время как совершенно соответствующая реализация может применять предикат точно last-first
раз, текст мне звучит так, как будто бы было предложено как можно скорее выйти.
Обратите внимание, что практически невозможно запросить ту же самую перегрузку, которая принимает ExecutionPolicy
. С тех пор порядок оценки неизвестен.
В менее формальной заметке любая реализация последовательной версии, которая не выходит из момента, когда предикат является истинным, ставит под сомнение учетные данные его автора.