Función swap de <array> en C++

C++ 容器类 <array>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.

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 <iostream>
#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:

  1. a.swap(b)Intercambia el contenido de a y b.
  2. 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 <iostream>
#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 miembroswapes el mismo.

Ejemplo 3: invertir un array

Se puede usar swap para invertir el array.

Ejemplo

#include <iostream>
#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, ystd::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 <iostream>
#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.

C++ 容器类 <array>Clase de contenedor <array> en C++

Otras extensiones