swap_ranges:交换两个区间的元素,如果两个区间是容器的所有元素.应该使用swap.
//TEMPLATE FUNCTION swap_ranges
template<class_FwdIt1,
class_FwdIt2> inline
_FwdIt2 _Swap_ranges(_FwdIt1 _First1,_FwdIt1 _Last1,
_FwdIt2 _Dest)
{ // swap [_First1, _Last1) with [_Dest, ...)
for (; _First1!= _Last1; ++_First1, ++_Dest)
_STD iter_swap(_First1,_Dest);
return(_Dest);
}
//TEMPLATE FUNCTION iter_swap
template<class_FwdIt1,
class_FwdIt2> inline
voiditer_swap(_FwdIt1 _Left, _FwdIt2 _Right)
{ // swap *_Left and *_Right
swap(*_Left, *_Right);
}
//TEMPLATE FUNCTION swap (from <algorithm>)
template<class _Ty>inline
voidswap(_Ty& _Left, _Ty& _Right)
{ // exchange values stored at _Left and _Right
_Ty _Tmp = _Move(_Left);
_Left = _Move(_Right);
_Right = _Move(_Tmp);
}
函数的实现也很简单.这里不过多赘述.
举例:
int main()
{
vector<int>vecInt;
for ( int i = 0;i < 10;++ i)
{
vecInt.push_back( i );
}
vector<int>vecIntOther;
transform(vecInt.begin(),vecInt.end(),back_inserter( vecIntOther ),add10<int> );
cout<<"vecIntvalue:\n";
copy(vecIntOther.begin(),vecIntOther.end(),ostream_iterator<int>( cout,"" ) );
cout<<"\nvecIntOthervalue: \n";
copy(vecInt.begin(),vecInt.end(),ostream_iterator<int>(cout," " ) );
cout<<"\nswap_rang:\n";
swap_ranges(vecInt.begin(),vecInt.end(),vecIntOther.begin() );
cout<<"vecIntvalue:\n";
copy(vecIntOther.begin(),vecIntOther.end(),ostream_iterator<int>( cout,"" ) );
cout<<"\nvecIntOthervalue: \n";
copy(vecInt.begin(),vecInt.end(),ostream_iterator<int>(cout," " ) );
system( "pause");
return0;
}