// <algorithm> 
template <class ForwardIterator1,
    class ForwardIterator2>
    void iter_swap (ForwardIterator1 a,
​        ForwardIterator2 b);

交换两个迭代器(Iterator)指向的元素。

该函数等价于:

template<class _FwdIt1,
    class _FwdIt2> inline
    void iter_swap(_FwdIt1 _Left, _FwdIt2 _Right)
    {    // swap *_Left and *_Right
        swap(*_Left, *_Right);
    }
  • a,b

    指向两个需要被交换的正向迭代器(Forward iterators)

    返回

    无。

  • 例 1

    #include <iostream>
    #include <algorithm>
    #include <vector>
    #include <iterator> 
    
    namespace ClassFoo{
        void IterSwap_1() {
            std::vector<int> FooVector;
            FooVector.push_back(1);
            FooVector.push_back(2);
    
            // 将 FooVector 拷至标准输出流中
            std::copy(
                FooVector.begin(),
                FooVector.end(),
                std::ostream_iterator<int>(std::cout, " "));
            std::cout << std::endl;
            // 进行交换
            std::iter_swap(
                FooVector.begin(),
                FooVector.begin() + 1
                );
    
            // 再打印一次
            std::copy(
                FooVector.begin(),
                FooVector.end(),
                std::ostream_iterator<int>(std::cout, " "));
            std::cout << std::endl;
    
        }
    }
    int main()
    {
        ClassFoo::IterSwap_1();
        return 0;
    }

    1 2 
    2 1 

  • 复杂度

    O(1),调用一次 std::swap

    数据争用相关

    两个迭代器指向的元素都被修改过。

    异常安全性相关

    如果调用 std::swap 抛异常,该函数才会抛异常。

    注意 无效参数将导致未定义行为(Undefined behavior)