std::swap în C++

Schimbă între ele valorile a două variabile de același tip.

Sintaxă
#include <utility>
template<class T>
void swap(T& a, T& b);

Ce face std::swap

std::swap(a, b) pune valoarea lui a în b și invers. Pentru tipurile care se pot muta (șiruri, vectori), schimbul este rapid: se mută doar pointerii interni, nu toate elementele.

Funcționează și cu tablouri C de aceeași lungime. Containerele au și metoda proprie a.swap(b), cu același efect.

În cod generic se scrie de obicei using std::swap; swap(a, b);, ca să fie folosită și o funcție swap specială a tipului, dacă există.

Parametri

Parametru Descriere
a, b Variabilele ale căror valori se schimbă. Trebuie să aibă același tip.

Ce returnează

Nimic.

Exemple

Exemplul 1: Schimbarea a două numere și a două șiruri

#include <print>
#include <string>
#include <utility>

int main() {
    int a = 3, b = 8;
    std::swap(a, b);
    std::println("a = {}, b = {}", a, b);

    std::string primul = "Cluj", alDoilea = "Iași";
    std::swap(primul, alDoilea);
    std::println("{} {}", primul, alDoilea);
}

Rezultat

a = 8, b = 3
Iași Cluj

Exemplul 2: Ordonarea a două valori

#include <print>
#include <utility>

int main() {
    int minim = 90, maxim = 15;
    if (minim > maxim) {
        std::swap(minim, maxim);
    }
    std::println("interval: {} - {}", minim, maxim);
}

Rezultat

interval: 15 - 90

Greșeli frecvente

  • Scrii schimbul manual cu o variabilă temporară. Merge, dar std::swap este mai scurt și folosește mutarea pentru tipurile mari.
  • Încerci std::swap cu tipuri diferite (de exemplu int și long). Nu compilează: ambele argumente trebuie să aibă același tip.

Comenzi înrudite

  • std::exchange: Pune o valoare nouă într-o variabilă și returnează valoarea veche.
  • std::move: Mută elementele unui interval la o destinație, fără să le copieze (versiunea din <algorithm>).
  • std::vector::swap: Schimbă instant conținutul a doi vectori de același tip, fără să copieze elementele.