Namespaces
Variants

std::basic_string<CharT,Traits,Allocator>::swap

De es.cppreference.net
 
 
 
std::basic_string
 
void swap( basic_string& other );
(hasta C++17)
void swap( basic_string& other ) noexcept(/* see below */);
(desde C++17)
(constexpr desde C++20)

Intercambia el contenido de la cadena con el de other. Todos los iteradores y referencias pueden invalidarse.

Si std::allocator_traits<allocator_type>::propagate_on_container_swap::value es true, entonces los asignadores se intercambian usando una llamada no cualificada a la no miembro swap. En caso contrario, no se intercambian (y si get_allocator() != other.get_allocator(), el comportamiento no está definido).

(desde C++11)

Parámetros

other - cadena con la cual intercambiar contenidos

Complejidad

Constante.

Excepciones

No se lanza ninguna excepción.

(until C++11)

No se lanza ninguna excepción, a menos que el comportamiento sea indefinido.

Si se lanza una excepción por cualquier motivo, esta función no tiene efecto ( garantía de seguridad de excepciones fuerte ).

(since C++11)


noexcept especificación:
noexcept ( std:: allocator_traits < Allocator > :: propagate_on_container_swap :: value ||
std:: allocator_traits < Allocator > :: is_always_equal :: value )
(desde C++17)

Ejemplo

#include <iostream>
#include <string>
int main() 
{
    std::string a = "AAA";
    std::string b = "BBBB";
    std::cout << "Before swap:\n"
                 "a = " << a << "\n"
                 "b = " << b << "\n\n";
    a.swap(b);
    std::cout << "After swap:\n"
                 "a = " << a << "\n"
                 "b = " << b << '\n';
}

Salida:

Before swap:
a = AAA
b = BBBB
After swap:
a = BBBB
b = AAA

Informes de defectos

Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares de C++ publicados anteriormente.

DR Aplicado a Comportamiento publicado Comportamiento correcto
LWG 403 C++98 swap() podría lanzar una excepción no se lanza ninguna excepción
LWG 535 C++98 el intercambio de strings no preservaba el orden de caracteres los órdenes también se preservan
LWG 2151
( P1148R0 )
C++11 no se lanzaba excepción en el caso
de allocators no propagadores desiguales
el comportamiento es
indefinido en este caso

Véase también

intercambia los valores de dos objetos
(plantilla de función)
intercambia dos rangos de elementos
(plantilla de función & objeto función de algoritmo)
intercambia los contenidos
(función miembro pública de std::basic_string_view<CharT,Traits>)