std::string::swap în C++

Schimbă conținutul a două șiruri între ele, rapid, fără copierea textului.

Sintaxă
void swap(std::string& alt) noexcept;
std::swap(a, b);

Ce face std::string::swap

a.swap(b) face ca a să conțină ce avea b și invers. Pentru șirurile lungi nu se copiază textul, ci doar pointerii interni, deci operația este instantanee indiferent de lungime.

std::swap(a, b) face același lucru și este forma folosită de obicei în cod generic.

Parametri

Parametru Descriere
alt Șirul cu care se face schimbul.

Ce returnează

Nimic.

Exemple

Exemplul 1: Schimbul a două nume

#include <iostream>
#include <string>
#include <utility>

int main() {
    std::string castigator = "Mihai", locul_doi = "Ana";
    std::cout << "Înainte: " << castigator << ", " << locul_doi << '\n';
    castigator.swap(locul_doi);
    std::cout << "După swap: " << castigator << ", " << locul_doi << '\n';
    std::swap(castigator, locul_doi);
    std::cout << "După std::swap: " << castigator << ", " << locul_doi << '\n';
}

Rezultat

Înainte: Mihai, Ana
După swap: Ana, Mihai
După std::swap: Mihai, Ana

Greșeli frecvente

  • Schimbi valorile manual cu o variabilă temporară (t = a; a = b; b = t;): face trei copii ale textului. swap nu copiază nimic.

Comenzi înrudite

  • std::string::assign: Înlocuiește tot conținutul șirului cu alt text, cu o bucată din alt text sau cu n caractere.
  • std::string: Șir de caractere care își gestionează singur memoria; atenție, lucrează cu octeți, nu cu litere.