◐ Shell
clean mode source ↗

std::swap - cppreference.com

Intercambia los valores dados.

1) Constante.

2) Lineal en N.

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 Intercambiable para más detalles.

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 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.
(función) [editar] Especialización de std::swap para unique_lock
(plantilla de función) [editar] Especialización de std::swap para shared_lock
(plantilla de función) [editar] Especializa el algoritmo std::swap.
(plantilla de función) [editar] Especializa al 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] Especializa el algoritmo std::swap
(plantilla de función) [editar] Intercambia dos rutas de acceso
(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] Especializa el algoritmo std::swap
(función) [editar] Especializa el algoritmo std::swap
(función) [editar]
#include <algorithm>
#include <iostream>

namespace Ns
{
    class A
    {
        int id {};
        
        friend void swap(A& lhs, A& rhs)
        {
            std::cout << "swap(" << lhs << ", " << rhs << ")\n";
            std::swap(lhs.id, rhs.id);
        }
        
        friend std::ostream& operator<<(std::ostream& os, A const& a)
        {
            return os << "A::id=" << a.id;
        }
    
    public:
        A(int i) : id {i} {}
        A(A const&) = delete;
        A& operator = (A const&) = delete;
    };
}

int main()
{
    int a = 5, b = 3;
    std::cout << a << ' ' << b << '\n';
    std::swap(a, b);
    std::cout << a << ' ' << b << '\n';
    
    Ns::A p {6}, q {9};
    std::cout << p << ' ' << q << '\n';
//  std::swap(p, q); // ERROR, no se cumplen los requisitos de tipo
    swap(p, q);      // OK, ADL encuentra la función amiga `swap` apropiada
    std::cout << p << ' ' << q << '\n';
}

Salida:

5 3
3 5
A::id=6 A::id=9
swap(A::id=6, A::id=9)
A::id=9 A::id=6

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