Espacios de nombres
Variantes

std::iter_swap

De cppreference.com
 
 
Biblioteca de algoritmos
Políticas de ejecución (C++17)
Operaciones de secuencia no modificantes
(C++11)(C++11)(C++11)
(C++17)
Operaciones de secuencia modificantes
Operaciones en almacenamiento no inicializado
Operaciones de partición
Operaciones de ordenación
(C++11)
Operaciones de búsqueda binaria
Operaciones de conjuntos (en rangos ordenados)
Operaciones de pila
(C++11)
Operaciones mínimo/máximo
(C++11)
(C++17)
Permutaciones
Operaciones numéricas
Bibliotecas C
 
<tbody> </tbody>
Definido en el archivo de encabezado <algorithm>
template< class ForwardIt1, class ForwardIt2 > void iter_swap( ForwardIt1 a, ForwardIt2 b );
(constexpr desde C++20)

Intercambia los valores de los elementos a los que apuntan los iteradores indicados.

Si se cumple alguna de las siguientes condiciones, el comportamiento no está definido:

Parámetros

a, b - Iteradores de los elementos a intercambiar.
Requisitos de tipo
-
ForwardIt1, ForwardIt2 debe satisfacer los requisitos de IteradorDeAvanceLegado.

Valor de retorno

(Ninguno)

Complejidad

Constante.

Notas

Esta plantilla de función modela la semántica de la operación de intercambio dada por Intercambiable. Es decir, se consideran las sobrecargas de swap encontradas por búsqueda dependiente de argumento y la alternativa de std::swap.

Posible implementación

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

Ejemplo

Lo siguiente es una implementación del ordenamiento por selección en C++.

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

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

void println(std::string_view rem, std::vector<int> const& v)
{
    std::cout << rem;
    for (int e : v)
        std::cout << e << ' ';
    std::cout << '\n';
}

template<int min, int max>
int rand_int()
{
    static std::uniform_int_distribution dist(min, max);
    static std::mt19937 gen(std::random_device{}());
    return dist(gen);
}

int main()
{
    std::vector<int> v;
    std::generate_n(std::back_inserter(v), 20, rand_int<-9, +9>);
    
    std::cout << std::showpos;
    println("Antes de ordenar:    ", v);
    selection_sort(v.begin(), v.end());
    println("Después de ordenar:  ", v);
}

Posible salida:

Antes de ordenar:    -9 -3 +2 -8 +0 -1 +8 -4 -5 +1 -4 -5 +4 -9 -8 -6 -6 +8 -4 -6 
Después de ordenar:  -9 -9 -8 -8 -6 -6 -6 -5 -5 -4 -4 -4 -3 -1 +0 +1 +2 +4 +8 +8

Informes de defectos

Los siguientes informes de defectos de cambio de comportamiento se aplicaron de manera retroactiva a los estándares de C++ publicados anteriormente.

ID Aplicado a Comportamiento según lo publicado Comportamiento correcto
LWG 187 C++98 No se especificaba si se usaba swap. El efecto equivale a swap(*a, *b).

Véase también

Intercambia los valores de dos objetos
(plantilla de función) [editar]
Intercambia dos rangos de elementos.
(plantilla de función) [editar]
(C++20)
Intercambia los objetos a los que apuntan dos iteradores subyacentes ajustados
(plantilla de función) [editar]
(C++20)
Intercambia los objetos a los que apuntan dos iteradores subyacentes
(plantilla de función) [editar]
(C++20)
Intercambia los valores referenciados por dos objetos desreferenciables.
(objeto punto de personalización) [editar]