ڼС
梦回起点
做你害怕做的事,你会发现:不过如此
本站基于WordPress—主题by 设计窝
冀ICP备15003737号
梦回起点
Copyright © 2015-2018 All rights reserved.

STL-algorithm之 all_of和any_of的用法(C++11)

标准模板库为我们提供了很多方便,使这些常用的东西不用自己去写。我们今天来看一下all_of和any_of的用法。这两个函数是C++11新增加 的,我用的是g++4,.8.1 别忘了编译的时候加上参数-std=c++11。

我们先来看一下两个两个函数的原型

template<class InputIterator, class Predicate>
bool all_of ( InputIterator _First, InputIterator _Last, Predicate _Pred );
template<class InputIterator, class Predicate>
bool any_of ( InputIterator _First, InputIterator _Last, Predicate _Pred );

参考资料:VS2012帮助文档

两个函数是做什么用的呢?

很简单,第一个函数检查是否所有的元素都满足给定的条件,第二个函数检查是否存在元素满足给定条件,第三个参数为一个接受一个参数的函数,因为只能接受一个参数,所以我们需要通过其他途径来完成我们的任务。

cout << any_of(i_num, i_num + 6, bind2nd(greater<int>(),7)) << endl;//可以这么写,查找给定范围是否存在大于7的数据,其中i_num是有六个元素的int数组

如果你还没有了解bind2nd(greater<int>(),7)是个什么东西,你也可以自己定义一个函数。

比如我定义这么一个函数模板

template<typename type, int n>
bool tiaojian(const type& num)
{
     return num > n;
}

cout << any_of(i_num, i_num + 6, tiaojian<int,7>) << endl;//等同于上面的语句

当然,如果你连函数模板也没有用过,那么就吧type改成int 也是可以的。

那么说来说去这两个到底是个什么东西呢,我们来看一下它们的实现方法。

下面是all_of的定义

下面是any_of的定义

参考资料:cplusplus.com

以上均为个人观点,如果有错误,请大家指正,如果有什么地方没有说明白也可以在下面留言。

2015-09-17