| by YoungTimes | No comments

C++11新特性-std::any_of

std::any_of是在C++ 11中引入的STL算法。当需要从一系列元素中查找是否存在任意一个元素满足给定条件的时候尤其有用。

1.需要引入头文件

#include <algorithm>

2.函数原型

template <class InputIterator, class UnaryPredicate>
bool any_of (InputIterator first, InputIterator last, UnaryPredicate pred);

std::any_of()针对[first, last)之间的所有元素调用pred,任何一个元素返回ture,函数就停止迭代,返回true,否则返回false。

函数的行为等效于:

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;
}

3.std::any_of()应用示例-Using std::any_of() with  Lambda Function

1、检查数组中是否存在长度为4的字符串。

假设字符串数组如下:

std::vector<std::string> vec = {"welcome", "to", "ban", "bei", "cha", "de", "xiao", "jiu", "bei", "com"};

使用std::any_of和Lambda表达式检查数组中是否存在长度为2的字符串。

// Check if vector contains any string with size 4.
bool result = std::any_of(vec.begin(), vec.end(), [](const std::string &str) {
    return str.size() == 2;                        
});

2.判断字符串中是否存在大写字符:

std::string str = "testString";

result = std::any_of(str.begin(), str.end(), ::isupper);

除非注明,否则均为[半杯茶的小酒杯]原创文章,转载必须以链接形式标明本文链接

本文链接:http://www.banbeichadexiaojiubei.com/index.php/2019/10/24/c11%e6%96%b0%e7%89%b9%e6%80%a7-stdany_of/