# std::iter_swap(std::reverse_iterator)

< cpp‎ | iterator‎ | reverse iterator

template< std::indirectly_swappable<Iter> Iter2 > friend constexpr void iter_swap( const reverse_iterator& x, const std::reverse_iterator<Iter2>& y ) noexcept(/*see below*/); |  | (C++20 起)

交换二个调整的迭代器所指向的元素。函数体等价于：

    auto tmp_x = x.base();
    auto tmp_y = y.base();
    ranges::iter_swap(--tmp_x, --tmp_y);

此函数模板对通常无限定或有限定查找不可见，而只能在 `std::reverse_iterator<Iter>` 为参数的关联类时由实参依赖查找找到。

### 参数

x, y | - | 要交换元素的逆向迭代器

### 返回值

（无）

### 复杂度

常数

### 异常

`noexcept` 说明：
noexcept(

std::is_nothrow_copy_constructible_v<Iter> &&
std::is_nothrow_copy_constructible_v<Iter2> &&
noexcept(ranges::iter_swap(--std::declval<Iter&>(), --std::declval<Iter2&>()))

)

### 示例

    #include <iostream>
    #include <iterator>
    #include <list>
    #include <vector>

    int main()
    {
        std::vector v {1, 2, 3};
        std::list   l {4, 5, 6};

        std::reverse_iterator<std::vector<int>::iterator> r1 { v.rbegin() };
        std::reverse_iterator<std::list<int>::iterator>   r2 { l.rbegin() };

        std::cout << *r1 << ' ' << *r2 << '\n';

        iter_swap(r1, r2);

        std::cout << *r1 << ' ' << *r2 << '\n';
    }

输出：

    3 6
    6 3

### 参阅

swap | 交换两个对象的值 (函数模板)
swap_ranges | 交换两个范围的元素 (函数模板)
iter_swap | 交换两个迭代器所指向的元素 (函数模板)
iter_swap (C++20) | 交换两个可解引用对象所引用的值 (定制点对象)
iter_swap (C++20) | 交换二个底层迭代器所指向的对象 (函数模板)