您现在的位置是:首页 > 正文

find/find_if详解

2024-02-29 14:56:56阅读 4

find/find_if:

函数功能:返回元素值为_Val的迭代器

template<class _InIt,

         class_Ty> inline

         _InIt find(_InIt _First, _InIt _Last, const _Ty& _Val)

         {       // find first matching _Val

         _DEBUG_RANGE(_First, _Last);

         return(_Rechecked(_First,

                   _Find(_Unchecked(_First),_Unchecked(_Last), _Val)));

         }

         // TEMPLATEFUNCTION find

         template<class _InIt,

         class_Ty> inline

                   _InIt _Find(_InIt _First,_InIt _Last, const _Ty& _Val)

         {       // find first matching _Val

                   for(; _First != _Last; ++_First)

                            if (*_First == _Val)

                                     break;

                   return(_First);

         }

注意:

◆  函数返回值的区间在[begin,end]之间.因此当我们调用这个函数的时候,我们应将返回的值与end比较.

◆  顺序容器不要使用算法库的find操作,而应该使用其本身提供的find.(原因很简单,自己肯定最了解自己)

◆  同样最好不要改变区间的值

find_if函数实现:

                   //TEMPLATE FUNCTION find_if

template<class _InIt,

         class_Pr> inline

         _InIt _Find_if(_InIt _First, _InIt_Last, _Pr _Pred)

         {       // find first satisfying _Pred

         for (;_First != _Last; ++_First)

                   if(_Pred(*_First))//这里使用单个参数的bool型函数:bool(*pFun)( T )

                            break;

         return(_First);

         }

 

template<class _InIt,

         class_Pr> inline

         _InIt find_if(_InIt _First, _InIt_Last, _Pr _Pred)

         {       // find first satisfying _Pred

         _DEBUG_RANGE(_First, _Last);

         _DEBUG_POINTER(_Pred);

         return(_Rechecked(_First,

                   _Find_if(_Unchecked(_First),_Unchecked(_Last), _Pred)));

         }

函数功能:返回使得_Predtrue的迭代器.

举例:

template<typenameT>

bool equal_ten( T _value )

{

         return_value == 3;

}

int main()

{

         vector<int>vecInt;

         vecInt.push_back( 2 );

         vecInt.push_back( 5 );

         vecInt.push_back( 7 );

         vecInt.push_back( 3 );

         vecInt.push_back( 2 );

         vecInt.push_back( 4 );

         vecInt.push_back( 3 );

         vecInt.push_back( -17 );

         vecInt.push_back( 3 );

 

         vector<int>::iteratoriterFind = find( vecInt.begin(),vecInt.end(),4 );

         if (iterFind != vecInt.end() )//注意判断是否已经找到

         {

                   cout<<*iterFind<<"\n";

         }

         iterFind = find_if(vecInt.begin(),vecInt.end(),equal_ ten <int>);

         if (iterFind != vecInt.end() )

         {

                   cout<<*iterFind<<"\n";

         }

         system( "pause");

         return0;

}

 

网站文章