find_if_not 源码剖析

来源:互联网 发布:维珍澳航 知乎 编辑:程序博客网 时间:2024/06/10 04:23

一:用法解析
函数原型:

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

功能:

和find_if的功能相反,在区间[ first , last )内,返回第一个使pred()为假的迭代器;若不存在这样的元素,返回last。

例子:

// find_if_not example#include <iostream>     // std::cout#include <algorithm>    // std::find_if_not#include <array>        // std::arrayint main () {  std::array<int,5> foo = {1,2,3,4,5};  std::array<int,5>::iterator it =    std::find_if_not (foo.begin(), foo.end(), [](int i){return i%2;} );  std::cout << "The first even value is " << *it << '\n';  return 0;}
运行如下:

The first even value is 2


二:源码解析
// TEMPLATE FUNCTION find_if_nottemplate<class _InIt,class _Pr> inline_InIt _Find_if_not(_InIt _First, _InIt _Last, _Pr _Pred){// find first element that satisfies !_Predfor (; _First != _Last; ++_First)if (!_Pred(*_First))break;return (_First);}template<class _InIt,class _Pr> inline_InIt find_if_not(_InIt _First, _InIt _Last, _Pr _Pred){// find first element that satisfies !_Pred_DEBUG_RANGE_PTR(_First, _Last, _Pred);return (_Rechecked(_First,_Find_if_not(_Unchecked(_First), _Unchecked(_Last), _Pred)));}



源码摘抄自Visual Studio 2015安装目录algorithm文件中。



点击进入目录----> C++源码剖析目录




1 0