remove_copy:移除值为value的元素,并将处理后在容器复制到另一容器里.
源码:
// TEMPLATE FUNCTION remove_copy
template<class _InIt,
class _OutIt,
class _Ty> inline
_OutIt _Remove_copy(_InIt _First, _InIt _Last,
_OutIt _Dest, const _Ty& _Val)
{ // copy omitting each matching _Val
for (; _First != _Last; ++_First)
if (!(*_First == _Val))
*_Dest++ = *_First;
return (_Dest);
}
有了remove这个函数,加上copy就完全搞定.
remove_copy_if:
// TEMPLATE FUNCTION remove_copy_if
template<class _InIt,
class _OutIt,
class _Pr> inline
_OutIt _Remove_copy_if(_InIt _First, _InIt _Last,
_OutIt _Dest, _Pr _Pred)
{ // copy omitting each element satisfying _Pred
for (; _First != _Last; ++_First)
if (!_Pred(*_First))
*_Dest++ = *_First;
return (_Dest);
}
有了remove_copy这个函数,这个自然就是小菜一碟.
还是来看例子吧!
举例:
template<typename T>
bool isTrue( T _val )
{
return ( _val % 2 ) == 0;
}
int main()
{
vector<int> vecInt;
for ( int i = 0;i < 10;++ i)
{
vecInt.push_back( i );
vecInt.push_back( 10 - i );
}
vector<int> vecNew;
cout<<"vecInt value:\n";
remove_copy( vecInt.begin(),vecInt.end(),ostream_iterator<int>( cout," ") ,2 );
cout<<"\nvecInt remove value:\n";
remove_copy_if( vecInt.begin(),vecInt.end(),ostream_iterator<int>( cout," ") ,isTrue<int> );
system( "pause" );
return 0;
}