鉴于以下代码,
std::vector<int> numbers = {1, 2, 3, 4, 5};
std::any_of(std::begin(numbers), std::end(numbers),
[](int number) { return number > 3; } );
std :: any_of是否需要(按标准),一旦达到4,就会返回?
答案 0 :(得分:34)
标准本身并未提出任何此类硬性要求。但有人可能会推断它是间接鼓励的([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);
返回:如果[first,last]为空,或者如果在[first,last]范围内没有迭代器i,则使得pred(* i)为真,并返回true 否则。
复杂性:至多是谓词的最后一次应用。
虽然一个完全符合要求的实现可能会将谓词完全 last-first
次应用,但对我而言,这句话听起来似乎会被鼓励尽快退出。
请注意,几乎不可能同意接受ExecutionPolicy
的重载。从那以后,评估的顺序是未知的。
在一个不那么正式的说明中,在谓词为真时退出的顺序版本的任何实现都会使其作者的凭据受到质疑。