Fonction swap de <array> en C++

C++ classe conteneur <array>


swapest utilisé dans array pourÉchange le contenu de deux tableaux.La fonction est un outil très utile.

swapest une fonction membre de la classe conteneur, utilisée pouréchanger le contenu de deux tableaux.Les deux tableaux doivent être du même type et de la même taille.

swapIl fournit un moyen efficace d'échanger le contenu de deux conteneurs, et est un utilitaire courant dans les implémentations d'algorithmes et de structures de données.

Définitions de mots: swapCela signifie « swap », c'est-à-dire échanger le contenu de deux tableaux.


Syntaxe de base et paramètres

swapC'est une fonction membre de la classe conteneur et elle nécessite un autre tableau comme paramètre.

Format de syntaxe

void swap(array& other) noexcept;

Description des paramètres

  • Paramètre: other
    • Type :array<T, N>&(références du même type)
    • Description : Un autre tableau avec le contenu duquel effectuer l'échange. Les deux tableaux doivent avoir le même type d'élément et la même taille.

Description de la fonction

  • Valeur de retour: void(Aucune valeur de retour).
  • EffetÉchange tous les éléments des deux tableaux. Il s'agit d'une opération en O(n) qui nécessite un échange élément par élément.
  • Remarque: swapGénéralement déclaré commenoexcept, ce qui indique qu'aucune exception ne sera levée.

Exemple

Maîtrisons cela en profondeur au moyen d'une série d'exemples.swapUtilisation.

Exemple 1 : Utilisation de base - échange de deux tableaux

Exemple

#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 << "Avant l'échange :" << 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;

    // Échanger deux tableaux
    a.swap(b);

    std::cout << "\n"Après l'échange :" << 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;
}

Sortie attendue :

交换前:
a: 1 2 3 4 5
b: 10 20 30 40 50

交换后:
a: 10 20 30 40 50
b: 1 2 3 4 5

Analyse du code :

  1. a.swap(b)Échangez le contenu de a et b.
  2. Après l'échange, a contient les valeurs initialement dans b, et b contient les valeurs initialement dans a.

Exemple 2 : Utilisation de std::swap

Vous pouvez également utiliserstd::swapla fonction pour échanger deux tableaux.

Exemple

#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 << "Avant l'échange : " << std::endl;
    std::cout << "arr1: ";
    for(int n : arr1) std::cout << n << " ";
    std::cout << std::endl;

    // Utiliser std::swap
    std::swap(arr1, arr2);

    std::cout << "Après échange : " << std::endl;
    std::cout << "arr1: ";
    for(int n : arr1) std::cout << n << " ";
    std::cout << std::endl;

    return 0;
}

Sortie attendue :

交换前:
arr1: 1 2 3
交换后:
arr1: 4 5 6

Analyse du code :

  • std::swap(arr1, arr2)Vous pouvez également échanger deux tableaux de la même manière.
  • L'effet est le même que celui d'appeler la fonction membreswapIdem.

Exemple 3 : Inverser un tableau

Vous pouvez utiliser swap pour inverser un tableau.

Exemple

#include <iostream>
#include <array>
#include <algorithm>

int main() {
    std::array<int, 5> numbers = {1, 2, 3, 4, 5};

    std::cout << "Avant l'inversion : ";
    for(int n : numbers) std::cout << n << " ";
    std::cout << std::endl;

    // Utiliser deux pointeurs pour inverser par échange
    auto left = numbers.begin();
    auto right = numbers.end() - 1;

    while(left < right) {
        std::swap(*left, *right);
        ++left;
        --right;
    }

    std::cout << "Après l'inversion : ";
    for(int n : numbers) std::cout << n << " ";
    std::cout << std::endl;

    return 0;
}

Sortie attendue :

反转前: 1 2 3 4 5
反转后: 5 4 3 2 1

Analyse du code :

  • En utilisant des pointeurs de tête et de queue etstd::swapCela permet de réaliser l'inversion du tableau.
  • Il s'agit d'un algorithme d'inversion implémenté manuellement.

Exemple 4 : Vider un tableau

Vous pouvez échanger avec un tableau vide pour obtenir un effet de vidage (bien que la taille du tableau soit fixe, le contenu peut être échangé).

Exemple

#include <iostream>
#include <array>

int main() {
    std::array<int, 5> data = {1, 2, 3, 4, 5};
    std::array<int, 5> empty = {};

    std::cout << "Avant l'échange - data: ";
    for(int n : data) std::cout << n << " ";
    std::cout << std::endl;

    // Échanger avec un tableau vide
    data.swap(empty);

    std::cout << "Après l'échange - data: ";
    for(int n : data) std::cout << n << " ";
    std::cout << std::endl;

    return 0;
}

Sortie attendue :

交换前 - data: 1 2 3 4 5
交换后 - data: 0 0 0 0 0

Analyse du code :

  • Comme la taille du tableau est fixe, les éléments ne peuvent pas être réellement supprimés, mais vous pouvez échanger avec un tableau entièrement composé de zéros pour « effacer » le contenu.
  • Cela peut être utile dans certains scénarios.

C++ classe conteneur <array>

autres extensions