std::array::swap
De cppreference.com
void swap( array& other )noexcept(/* véase más abajo */); | (desde C++11) (hasta C++20) | |
constexprvoid swap( array& other )noexcept(/* see below */); | (desde C++20) | |
Intercambia el contenido del contenedor con el de other
. No ocasiona que los iteradores y referencias se asocien con el otro contenedor.
Contenido |
[editar]Parámetros
other | - | El contenedor con el cual intercambiar el contenido. |
[editar]Valor de retorno
(Ninguno)
[editar]Excepciones
Especificación noexcept: (desde C++11)
En la expresión anterior, el identificador | (hasta C++17) | ||||||
(desde C++17) |
[editar]Complejidad
Lineal de acuerdo al tamaño del contenedor.
[editar]Ejemplo
Ejecuta este código
#include <array>#include <iostream> template<class Os, class V> Os& operator<<(Os& os, const V& v){ os <<"{";for(auto i : v) os <<' '<< i;return os <<" } ";} int main(){std::array<int, 3> a1{1, 2, 3}, a2{4, 5, 6}; auto it1 = a1.begin();auto it2 = a2.begin();int& ref1 = a1[1];int& ref2 = a2[1]; std::cout<< a1 << a2 <<*it1 <<' '<<*it2 <<' '<< ref1 <<' '<< ref2 <<'\n'; a1.swap(a2);std::cout<< a1 << a2 <<*it1 <<' '<<*it2 <<' '<< ref1 <<' '<< ref2 <<'\n'; // Observa que después del intercambio los iteradores y referencias// continúan asociados con su array original// array, p. ej., `it1` aún apunta al elemento a1[0], `ref1` se refiere a a1[1].}
Salida:
{ 1 2 3 } { 4 5 6 } 1 4 2 5 { 4 5 6 } { 1 2 3 } 4 1 5 2
[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 2456 | C++11 | La especificación noexcept está mal formada | Se hizo que funcionara |
[editar]Véase también
(C++11) | Especializa el algoritmo std::swap. (plantilla de función) |