std::iter_swap (3) - Linux Manuals
std::iter_swap: std::iter_swap
Command to display std::iter_swap
manual in Linux: $ man 3 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)
Pages related to std::iter_swap
- std::iter_value_t,std::iter_reference_t,std::iter_difference_t, (3) - std::iter_value_t,std::iter_reference_t,std::iter_difference_t,
- std::iter_value_t,std::iter_reference_t,std::iter_difference_t,std::iter_rvalue_reference_t,std::iter_common_reference_t (3) - std::iter_value_t,std::iter_reference_t,std::iter_difference_t,std::iter_rvalue_reference_t,std::iter_common_reference_t
- std::iterator (3) - std::iterator
- std::iterator_traits (3) - std::iterator_traits
- std::identity (3) - std::identity
- std::ifstream (3) - std::basic_ifstream
- std::ignore (3) - std::ignore
- std::ilogb,std::ilogbf,std::ilogbl (3) - std::ilogb,std::ilogbf,std::ilogbl
- std::imag(std::complex) (3) - std::imag(std::complex)
- std::in_place,std::in_place_type,std::in_place_index,std::in_place_t, (3) - std::in_place,std::in_place_type,std::in_place_index,std::in_place_t,