equal:判断[_First1,_Last1)与[_First2,...)开头区间的元素是否相等.
template<class _InIt1,
class_InIt2> inline
boolequal(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2)
{ // compare [_First1, _Last1) to [First2, ...)
_DEBUG_RANGE(_First1, _Last1);
_DEBUG_POINTER(_First2);
return(_Equal1(_Unchecked(_First1), _Unchecked(_Last1),
_First2,_Is_checked(_First2)));
}
template<class _InIt1,
class_InIt2> inline
bool_Equal1(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _STDtr1::true_type)
{ // compare [_First1, _Last1) to [First2, ...), checked dest
return(_Equal(_First1, _Last1,
_First2));
}
//TEMPLATE FUNCTION equal
template<class _InIt1,
class_InIt2> inline
bool_Equal(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2)
{ // compare [_First1, _Last1) to [First2, ...)
for (;_First1 != _Last1; ++_First1, ++_First2)
if(!(*_First1 == *_First2))
return (false);
return(true);
}
equal:判断[_First1,_Last1)与[_First2,...)开头区间的元素使得_Pred为真..
template<class _InIt1,
class_InIt2,
class_Pr> inline
bool equal(_InIt1_First1, _InIt1 _Last1,
_InIt2 _First2, _Pr _Pred)
{ // compare [_First1, _Last1) to [First2, ...)
_DEBUG_RANGE(_First1, _Last1);
_DEBUG_POINTER(_First2);
return(_Equal2(_Unchecked(_First1), _Unchecked(_Last1),
_First2, _Pred, _Is_checked(_First2)));
}
template<class _InIt1,
class_InIt2,
class_Pr> inline
bool_Equal2(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _Pr _Pred,_STD tr1::true_type)
{ // compare [_First1, _Last1) to [First2, ...), checkedinput
return(_Equal(_First1, _Last1,
_First2, _Pred));
}
//TEMPLATE FUNCTION equal WITH PRED
template<class _InIt1,
class_InIt2,
class_Pr> inline
bool_Equal(_InIt1 _First1, _InIt1 _Last1,
_InIt2 _First2, _Pr _Pred)
{ // compare [_First1, _Last1) to [First2, ...) using _Pred
for (;_First1 != _Last1; ++_First1, ++_First2)
if(!_Pred(*_First1, *_First2))
return (false);
return(true);
}
举例:
template<typenameT>
bool parity_fun( T _value1,T _value2 )
{
return_value1 % 2 == ( _value2 % 2 + 1 ) % 2;
}
int main()
{
vector<int>vecInt;
vecInt.push_back( 3 );
vecInt.push_back( 6 );
vecInt.push_back( 5 );
list<int>lstInt;
lstInt.push_back( 2 );
lstInt.push_back( 5 );
lstInt.push_back( 4 );
boolbEqual = equal( vecInt.begin(),vecInt.end(),lstInt.begin() );//false
bEqual = equal(vecInt.begin(),vecInt.end(),lstInt.begin(),parity_fun<int> );//true
system( "pause");
return0;
}
需要注意的一点是:区间二一定要大于区间一.