replace:替换指定值的元素
//TEMPLATE FUNCTION replace
template<class _FwdIt,
class_Ty> inline
void_Replace(_FwdIt _First, _FwdIt _Last,
const_Ty& _Oldval, const _Ty& _Newval)
{ // replace each matching _Oldval with _Newval
for (;_First != _Last; ++_First)
if(*_First == _Oldval)
*_First = _Newval;
}
template<class _FwdIt,
class_Ty> inline
voidreplace(_FwdIt _First, _FwdIt _Last,
const_Ty& _Oldval, const _Ty& _Newval)
{ // replace each matching _Oldval with _Newval
_DEBUG_RANGE(_First, _Last);
_Replace(_Unchecked(_First),_Unchecked(_Last),
_Oldval, _Newval);
}
replace_if和前面的_if系列函数一样,提供返回值为bool的但参数函数.如果返回值为true,则替换.
// TEMPLATEFUNCTION replace_if
template<class _FwdIt,
class_Pr,
class_Ty> inline
void_Replace_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const_Ty& _Val)
{ // replace each satisfying _Pred with _Val
for (;_First != _Last; ++_First)
if(_Pred(*_First))
*_First = _Val;
}
template<class _FwdIt,
class_Pr,
class_Ty> inline
voidreplace_if(_FwdIt _First, _FwdIt _Last, _Pr _Pred, const_Ty& _Val)
{ // replace each satisfying _Pred with _Val
_DEBUG_RANGE(_First, _Last);
_DEBUG_POINTER(_Pred);
_Replace_if(_Unchecked(_First),_Unchecked(_Last),
_Pred, _Val);
}
这两个函数的实现码很简单.这里不过多说明.
举例:
template<typenameT>
bool isTrue( T _val )
{
return( _val % 2 ) == 0;
}
int main()
{
vector<int>vecInt;
for ( int i = 0;i < 10;++ i)
{
vecInt.push_back( i );
}
cout<<"vecIntsource:\n";
copy( vecInt.begin(),vecInt.end(),ostream_iterator<int>( cout,"" ) );
replace(vecInt.begin(),vecInt.end(),2,1 );
cout<<"\nvecIntreplace:\n";
copy(vecInt.begin(),vecInt.end(),ostream_iterator<int>(cout," " ) );
replace_if(vecInt.begin(),vecInt.end(),isTrue<int>,10);
cout<<"\nvecIntreplace:\n";
copy(vecInt.begin(),vecInt.end(),ostream_iterator<int>(cout," " ) );
system( "pause");
return0;
}