std::array::swap
De cppreference.com
<tbody>
</tbody>
<tbody class="t-dcl-rev ">
</tbody><tbody>
</tbody>
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.
Parámetros
| other | - | El contenedor con el cual intercambiar el contenido. |
Valor de retorno
(Ninguno)
Excepciones
|
Especificación noexcept: (desde C++11)
<tbody>
</tbody>
En la expresión anterior, el identificador |
(hasta C++17) | ||||||
| (desde C++17) |
Para arrays de tamaño cero,
.
Complejidad
Lineal de acuerdo al tamaño del contenedor.
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
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 |
Véase también
(C++11) |
Especializa el algoritmo std::swap. (plantilla de función) |