Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
std::iter_swap(3)	      C++ Standard Libary	     std::iter_swap(3)

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  LegacyFor-
       wardIterator.
	  -
	  *a, *b must meet the requirements of Swappable.

Return value
	  (none)

Complexity
	  constant

Notes
	  This	function  template  models the semantics of the	swap operation
       given by
	  Swappable. That is, overloads	of swap	found by ADL and the fall back
       of std::swap
	  are considered.

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(-9, +9);
	    std::vector<int> v;
	    std::generate_n(back_inserter(v), 20, bind(dist, gen));

	    std::cout << "Before sort: " << std::showpos;
	    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';
	}

Possible output:
	Before	sort: -9 -3 +2 -8 +0 -1	+8 -4 -5 +1 -4 -5 +4 -9	-8 -6 -6 +8 -4
       -6
	After sort : -9	-9 -8 -8 -6 -6 -6 -5 -5	-4 -4 -4 -3 -1 +0 +1 +2	+4  +8
       +8

See also
	  swap	      swaps the	values of two objects
		      (function	template)
	  swap_ranges swaps two	ranges of elements
		      (function	template)
	  iter_swap    swaps the objects pointed to by two adjusted underlying
       iterators
	  (C++20)     (function	template)
	  iter_swap   swaps the	objects	pointed	to by two underlying iterators
	  (C++20)     (function	template)
	  iter_swap   swaps the	values referenced by two  dereferenceable  ob-
       jects
	  (C++20)     (customization point object)

http://cppreference.com		  2022.07.31		     std::iter_swap(3)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=std::iter_swap&sektion=3&manpath=FreeBSD+Ports+15.0>

home | help