std::array::swap
De cppreference.com
void swap( array& other ) noexcept(/* véase más abajo */); |
(desde C++11) (hasta C++20) |
|
constexpr void 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) |