Función swap de <array> en C++
Clase de contenedor <array> en C++
swapEs la función en array que se utiliza paraintercambiar el contenido de dos arrays;es una herramienta muy útil.
swapEs una función miembro de la clase contenedora, utilizada paraintercambiar el contenido de dos arrays. Los dos arrays deben ser del mismo tipo y del mismo tamaño.
swapProporciona una forma eficiente de intercambiar el contenido de dos contenedores, y es una herramienta común en la implementación de algoritmos y estructuras de datos.
Definición del término: swapSignifica 'intercambiar', es decir, intercambiar el contenido de dos arrays.
Sintaxis básica y parámetros
swapEs una función miembro de la clase contenedora, que requiere otro array como parámetro.
Formato de sintaxis
void swap(array& other) noexcept;
Descripción de parámetros
- Parámetro:
other- Tipo:
array<T, N>&(referencia del mismo tipo) - Descripción: otro array con el que se intercambiará el contenido. Los dos arrays deben tener el mismo tipo de elemento y el mismo tamaño.
- Tipo:
Descripción de la función
- Valor de retorno:
void(sin valor de retorno). - Efecto: intercambia todos los elementos de los dos arrays. Esta es una operación O(n), que requiere intercambiar elemento por elemento.
- Nota:
swapGeneralmente se declara comonoexcept, lo que significa que no lanzará excepciones.
Ejemplo
Vamos a dominar por completo, mediante una serie de ejemplos,swapel uso de dicha función.
Ejemplo 1: uso básico - intercambiar dos arrays
Ejemplo
#include <array>
int main() {
std::array<int, 5> a = {1, 2, 3, 4, 5};
std::array<int, 5> b = {10, 20, 30, 40, 50};
std::cout << "Antes del intercambio:" << std::endl;
std::cout << "a: ";
for(int n : a) std::cout << n << " ";
std::cout << std::endl;
std::cout << "b: ";
for(int n : b) std::cout << n << " ";
std::cout << std::endl;
// Intercambiar dos arrays
a.swap(b);
std::cout << "\n"Después del intercambio:" << std::endl;
std::cout << "a: ";
for(int n : a) std::cout << n << " ";
std::cout << std::endl;
std::cout << "b: ";
for(int n : b) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
Resultado esperado:
交换前: a: 1 2 3 4 5 b: 10 20 30 40 50 交换后: a: 10 20 30 40 50 b: 1 2 3 4 5
Análisis del código:
a.swap(b)Intercambia el contenido de a y b.- Después del intercambio, a contiene el valor original de b, y b contiene el valor original de a.
Ejemplo 2: usar std::swap
También se puede usarstd::swapla función para intercambiar dos arrays.
Ejemplo
#include <array>
#include <algorithm>
int main() {
std::array<int, 3> arr1 = {1, 2, 3};
std::array<int, 3> arr2 = {4, 5, 6};
std::cout << "Antes del intercambio: " << std::endl;
std::cout << "arr1: ";
for(int n : arr1) std::cout << n << " ";
std::cout << std::endl;
// Usar std::swap
std::swap(arr1, arr2);
std::cout << "Después del intercambio: " << std::endl;
std::cout << "arr1: ";
for(int n : arr1) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
Resultado esperado:
交换前: arr1: 1 2 3 交换后: arr1: 4 5 6
Análisis del código:
std::swap(arr1, arr2)También se pueden intercambiar dos arrays.- El efecto en comparación con llamar a la función miembro
swapes el mismo.
Ejemplo 3: invertir un array
Se puede usar swap para invertir el array.
Ejemplo
#include <array>
#include <algorithm>
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
std::cout << "Antes de invertir: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
// Usar dos punteros para intercambiar e invertir
auto left = numbers.begin();
auto right = numbers.end() - 1;
while(left < right) {
std::swap(*left, *right);
++left;
--right;
}
std::cout << "Después de invertir: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
Resultado esperado:
反转前: 1 2 3 4 5 反转后: 5 4 3 2 1
Análisis del código:
- Usando punteros de inicio y fin, y
std::swapse puede invertir el array. - Este es un algoritmo de inversión implementado manualmente.
Ejemplo 4: vaciar un array
Se puede intercambiar con un array vacío para lograr el efecto de vaciado (aunque el tamaño del array es fijo, se puede intercambiar el contenido).
Ejemplo
#include <array>
int main() {
std::array<int, 5> data = {1, 2, 3, 4, 5};
std::array<int, 5> empty = {};
std::cout << "Antes del intercambio - data: ";
for(int n : data) std::cout << n << " ";
std::cout << std::endl;
// Intercambiar con un array vacío
data.swap(empty);
std::cout << "Después del intercambio - data: ";
for(int n : data) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
Resultado esperado:
交换前 - data: 1 2 3 4 5 交换后 - data: 0 0 0 0 0
Análisis del código:
- Dado que el tamaño del array es fijo, no se pueden eliminar realmente los elementos, pero se puede intercambiar con un array de todos ceros para "vaciar" el contenido.
- Esto puede ser útil en algunos escenarios.
Otras extensiones