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::swapeste mai scurt și folosește mutarea pentru tipurile mari. - Încerci
std::swapcu tipuri diferite (de exempluintșilong). 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.