std::iter_swap (3) - Linux Manuals

std::iter_swap: std::iter_swap

NAME

std::iter_swap - std::iter_swap

Synopsis


Defined in header <algorithm>
template< class ForwardIt1, class ForwardIt2 > (until C++20)
void iter_swap( ForwardIt1 a, ForwardIt2 b );
template< class ForwardIt1, class ForwardIt2 > (since C++20)
constexpr void iter_swap( ForwardIt1 a, ForwardIt2 b );


Swaps the values of the elements the given iterators are pointing to.

Parameters


a, b - iterators to the elements to swap

Type requirements


-
ForwardIt1, ForwardIt2 must meet the requirements of LegacyForwardIterator.
-
*a, *b must meet the requirements of Swappable.

Return value


(none)

Complexity


constant

Possible implementation


  template<class ForwardIt1, class ForwardIt2>
  constexpr void iter_swap(ForwardIt1 a, ForwardIt2 b) // constexpr since C++20
  {
     using std::swap;
     swap(*a, *b);
  }

Example


The following is an implementation of selection sort in C++
// Run this code


  #include <random>
  #include <vector>
  #include <iostream>
  #include <algorithm>
  #include <functional>


  template<class ForwardIt>
  void selection_sort(ForwardIt begin, ForwardIt end)
  {
      for (ForwardIt i = begin; i != end; ++i)
          std::iter_swap(i, std::min_element(i, end));
  }


  int main()
  {
      std::random_device rd;
      std::mt19937 gen(rd());
      std::uniform_int_distribution<> dist(-10, 10);
      std::vector<int> v;
      generate_n(back_inserter(v), 20, bind(dist, gen));


      std::cout << "Before sort: ";
      for(auto e : v) std::cout << e << " ";


      selection_sort(v.begin(), v.end());


      std::cout << "\nAfter sort: ";
      for(auto e : v) std::cout << e << " ";
      std::cout << '\n';
  }

Output:


  Before sort: -7 6 2 4 -1 6 -9 -1 2 -5 10 -9 -5 -3 -5 -3 6 6 1 8
  After sort: -9 -9 -7 -5 -5 -5 -3 -3 -1 -1 1 2 2 4 6 6 6 6 8 10

See also


            swaps the values of two objects
swap (function template)
            swaps two ranges of elements
swap_ranges (function template)