6.逆转
- reverse()
- reverse_copy()
这两个函数都使用双向迭代器。
函数模板为:
//reverse
template<class BidirIt>
void reverse(BidirIt first, BidirIt last)
{
while ((first != last) && (first != --last)) {
std::iter_swap(first++, last);
}
}
//reverse_copy
template<class BidirIt, class OutputIt>
OutputIt reverse_copy(BidirIt first, BidirIt last, OutputIt d_first)
{
while (first != last) {
*(d_first++) = *(--last);
}
return d_first;
}
说明:
1. reverse()将区间[first,last]中元素头尾交换
2. reverse_copy是将源区间[first,last]中的元素从后到前面赋值给以d_first开头的目标区间,然后返回最后一个元素的后一个位置。在使用中,需要确保目标空间够大,否则需要插入型迭代器。
例子:
--------------省略-----------
vector<int> v({1,2,3});
reverse(std::begin(v), std::end(v));
--------------省略-----------
vector<int> destination(3);
reverse_copy(std::begin(v), std::end(v), std::begin(destination));
--------------省略-----------
输出结果为:
3 2 1
1 2 3