reverse
●将序列的元素的顺序颠倒。
●接受双向迭代器(或随机迭代器),无返回值。
●考虑点:元素个数为奇数或偶数的情况的处理
●代码实现:
双向迭代器的版本的实现:
template <typename BidirectionalIterator>
void reverse(BidirectionalIterator first,BidirectionalIterator last)
{
while(true)
{
if(first==last||first==--last)
return ;
else
iter_swap(first++,last);
}
}
随机访问迭代器的版本的实现:
template <typename RandomAccessIterator>
void reverseRandom(RandomAccessIterator first,RandomAccessIterator last)
{
while(first<last)
{
iter_swap(first++,--last);
}
}
iter_swap算法的实现:
template<typename ForwardIterator1,typename ForwardIterator2>
void iter_swap(ForwardIterator1 a,ForwardIterator2 b)
{
typename iterator_traits<ForwardIterator1>::value_type temp=*a;
*a=*b;
*b=temp;
}
reverse_copy
●将颠倒后的序列复制到新容器中,不改变原容器元素的顺序。
●接受的是双向、输出迭代器,返回的是一个输出迭代器对象。
●代码的实现:
template<typename BidirectionalIterator,typename OutputIterator>
OutputIterator reverse_copy(BidirectionalIterator first,BidirectionalIterator last,OutputIterator result)
{
while(first!=last)
{
--last;
*result=*last;
++result;
}
return result;
}