function template
<algorithm>

std::any_of

template <class InputIterator, class UnaryPredicate>  bool any_of (InputIterator first, InputIterator last, UnaryPredicate pred);
测试范围内的任何元素是否满足条件
如果范围 [first,last) 中的任何元素满足 pred 返回 true,否则返回 false

如果 [first,last) 是一个空范围,则函数返回 false

此函数模板的行为等同于
1
2
3
4
5
6
7
8
9
template<class InputIterator, class UnaryPredicate>
  bool any_of (InputIterator first, InputIterator last, UnaryPredicate pred)
{
  while (first!=last) {
    if (pred(*first)) return true;
    ++first;
  }
  return false;
}

参数

first, last
输入迭代器 指向序列的起始和结束位置。使用的范围是 [first,last),它包含 firstlast 之间的所有元素,包括 first 指向的元素,但不包括 last 指向的元素。
pred
一元函数,接受范围内的元素作为参数,并返回一个可转换为 bool 的值。返回值表示该元素是否满足此函数检查的条件。
该函数不得修改其参数。
这可以是函数指针或函数对象。

返回值

如果范围 [first,last) 中的任何元素满足 pred 返回 true,否则返回 false

如果 [first,last) 是一个空范围,则函数返回 false

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
// any_of example
#include <iostream>     // std::cout
#include <algorithm>    // std::any_of
#include <array>        // std::array

int main () {
  std::array<int,7> foo = {0,1,-1,3,-3,5,-5};

  if ( std::any_of(foo.begin(), foo.end(), [](int i){return i<0;}) )
    std::cout << "There are negative elements in the range.\n";

  return 0;
}

输出
There are negative elements in the range.


复杂度

最多与 firstlast 之间的 距离 成线性关系:对每个元素调用 pred 直到找到匹配项。

数据竞争

范围 [first,last) 中的一些(或全部)对象被访问(最多一次)。

异常

如果 pred 或迭代器上的操作抛出异常,则抛出异常。
请注意,无效的参数会导致 *未定义行为*。

另见