The Wayback Machine - https://web.archive.org/web/20210506121739/https://es.cppreference.com/w/cpp/algorithm/swap
Espacios de nombres
Variantes
Acciones

std::swap

De cppreference.com
< cpp‎ | algorithm
 
 
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
 
Definido en el archivo de encabezado <algorithm>
(hasta C++11)
Definido en el archivo de encabezado <utility>
(desde C++11)
Definido en el archivo de encabezado <string_view>
(desde C++17)
(1)
template< class T >
void swap( T& a, T& b );
(hasta C++11)
template< class T >
void swap( T& a, T& b ) noexcept(/* véase más abajo */);
(desde C++11)
(hasta C++20)
template< class T >
constexpr void swap( T& a, T& b ) noexcept(/* véase más abajo */);
(desde C++20)
(2)
template< class T2, std::size_t N >
void swap( T2 (&a)[N], T2 (&b)[N]) noexcept(/* véase más abajo */);
(desde C++11)
(hasta C++20)
template< class T2, std::size_t N >
constexpr void swap( T2 (&a)[N], T2 (&b)[N]) noexcept(/* véase más abajo */);
(desde C++20)

Intercambia los valores dados.

1) Intercambia los valores a y b. Esta sobrecarga no participa en la resolución de sobrecarga a menos que std::is_move_constructible_v<T> && std::is_move_assignable_v<T> sea true. (desde C++17)
2) Intercambia los arrays a y b. Efectivamente llama a std::swap_ranges(a, a+N, b). Esta sobrecarga no participa en la resolución de sobrecarga a menos que std::is_swappable_v<T2> sea true. (desde C++17)

Contenido

[editar] Parámetros

a, b - Los valores a ser intercambiados.
Requerimientos de tipo
-
T debe satisfacer los requerimientos de MoveAssignable y MoveConstructible.
-
T2 debe satisfacer los requerimientos de Swappable.

[editar] Valor de retorno

(Ninguno)

[editar] Excepciones

1)

(Ninguna)

(hasta C++11)
Especificación noexcept:   (desde C++11)
noexcept(

    std::is_nothrow_move_constructible<T>::value &&
    std::is_nothrow_move_assignable<T>::value

)
(desde C++11)
2)
Especificación noexcept:   (desde C++11)
noexcept(noexcept(swap(*a, *b)))
La búsqueda del identificador swap en la especificación de excepción encuentra esta plantilla de función además de lo que se encuentre por las reglas de búsqueda habituales, lo que hace la especificación de excepción equivalente a C++17 std::is_nothrow_swappable.
(desde C++11)
(hasta C++17)
Especificación noexcept:   (desde C++11)
(desde C++17)

[editar] Complejidad

1) Constante.
2) Lineal en N.

[editar] Especializaciones

std::swap puede ser especializada en el espacio de nombres std para tipos definidos por el programa, pero tales especializaciones no se encuentran por la búsqueda dependiente de argumento (el espacio de nombres std no es el espacio de nombres asociado para los tipos definidos por el programa).

(hasta C++20)

La manera esperada de hacer intercambiable a un tipo definido por el programa es proporcionar una función no miembro swap en el mismo espacio de nombres que el tipo: véase Swappable para más detalles.

Las siguientes sobrecargas ya se proporcionan por la biblioteca estándar:

Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo the std::swap.
(plantilla de función) [editar]
Especializa el algoritmo the std::swap.
(plantilla de función) [editar]
Especializa el algoritmo the std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap .
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(función) [editar]
Especialización de std::swap para unique_lock
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(plantilla de función) [editar]
Especializa el algoritmo std::swap.
(función) [editar]
Especializa el algoritmo std::swap.
(función) [editar]
Especializa el algoritmo std::swap.
(función) [editar]
Intercambia dos rutas de acceso
(función) [editar]

[editar] Ejemplo

#include <algorithm>
#include <iostream>
 
int main()
{
    int a = 5, b = 3;
 
    // antes
    std::cout << a << ' ' << b << '\n';
 
    std::swap(a,b);
 
    // después
    std::cout << a << ' ' << b << '\n';
}

Salida:

5 3
3 5

[editar] 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 2554 C++11 Intercambiar arrays multidimensionales nunca puede ser
noexcept debido a problemas de búsqueda de nombres.
Se hizo funcionar.

[editar] Véase también

Intercambia los elementos a los que apuntan dos iteradores
(plantilla de función) [editar]
swaps dos rangos de elementos
Original:
swaps two ranges of elements
The text has been machine-translated via Google Translate.
You can help to correct and verify the translation. Click here for instructions.

(plantilla de función) [editar]
(C++14)
Reemplaza el argumento con un valor nuevo y devuelve su valor previo.
(plantilla de función) [editar]