# std::iter_swap(std::move_iterator)

< cpp‎ | iterator‎ | move iterator

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

交换二个底层迭代器所指向的对象。函数体等价于 ranges​::​iter_swap(x.current, y.current); 。

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

### 参数

x, y | - | 用于交换元素的移动迭代器。

### 返回值

（无）

### 复杂度

常数

### 异常

`noexcept` 说明：
noexcept(noexcept( ranges::iter_swap( x.current, y.current ) ))

### 示例

    #include <iostream>
    #include <iterator>
    #include <string>
    #include <vector>

    int main()
    {
        std::vector<std::string> p { "AA", "EE" },
                                 q { "ⱯⱯ", "ƎƎ" };

        std::move_iterator<std::vector<std::string>::iterator>
            x = std::make_move_iterator( p.begin() ),
            y = std::make_move_iterator( q.begin() );

        std::cout << *x << ' ' << *y << '\n';

        iter_swap(x, y); // ADL

        std::cout << *x << ' ' << *y << '\n';
    }

输出：

    AA ⱯⱯ
    ⱯⱯ AA

### 参阅

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