Sintaxă:
șablon < clasa T > gol schimb ( T & variabila_1 , T & variabila_2 ) ;Atât valoarea primei variabile, cât și a celei de-a doua variabile, ambele memorând valori, urmează să fie schimbate. Funcția doar schimbă valorile variabilelor; nu are ieșire.”
Funcționarea funcției swap() în C++
Funcția de swap este implementată în C++ folosind următoarele trei linii.
Șablon gol schimb ( T & i , T & j ) {
T temp = std :: mutare ( i ) ;
i = std :: mutare ( j ) ;
j = std :: mutare ( temp ) ;
}
Instrucțiunea „T temp = std::move(i)”; face o copie a elementului „i” și îl dublează. Aici, „i = std::move(j)”; renunță la elementele originale ale lui „i” și stochează copia „i” a lui „j” în loc de „j” original. Formula „j = std:: move(temp)”; salvați „i” cu o clonă de temp și eliminați conținutul identic de temp. De asemenea, ștergeți variabila temp după ce execuția funcției swap() este completă.
Exemplul 1: Program folosind metoda std::move la Swap
După cum se demonstrează mai jos, putem schimba două obiecte folosind caracteristica C++11 std::move.
#include
#include
șablon
gol schimb ( T & A , T & b )
{
T temp = std :: mutare ( A ) ;
A = std :: mutare ( b ) ;
b = std :: mutare ( temp ) ;
}
int principal ( )
{
std :: vector listă = { 10 , 12 , 13 , cincisprezece , 16 , 17 } ;
int i = 3 , j = 5 ;
schimb ( listă [ i ] , listă [ j ] ) ;
pentru ( int i : listă ) {
std :: cout << i << ' ' ;
}
întoarcere 0 ; }
Avem o declarație șablon care are un obiect „T”. După aceea, am stabilit funcția ca „swap”. Funcția preia cei doi parametri &a și &b, de tip „T”. Ca urmare a argumentelor T& a, T& b care referă sau stochează adresa variabilei transmise și se aplică direct acestora fără a reveni, funcția swap(T& a, T& b) se numește apel prin referință.
În interiorul void swap, am aplicat algoritmul de schimbare folosind metoda std::move. Apoi, am construit programul principal. Aici, am declarat variabila „listă” și am inițializat-o cu lista de valori numerice. Am stabilit valorile pentru „i” și „j” pentru schimbare. Valoarea numerică situată la al doilea indice a fost înlocuită cu valoarea numerică la al cincilea indice. Apoi, am numit funcția de schimb și i-am transmis indecșii „i” și „j” pentru schimbare. Bucla for este folosită pentru tipărirea listei schimbate.
Ieșirea a afișat lista modificată. Puteți observa că noua listă generată a schimbat valoarea în funcție de indecșii specificați.
Exemplul 2: Program folosind metoda std::swap pentru a schimba
Utilizarea mecanismului std::swap găsit în antetul utilitarului (în C++11) este soluția obișnuită. Valorile a două obiecte sunt schimbate pentru a le face să funcționeze.
#include#include
#include
int principal ( )
{
std :: vectorarr = { 3 , 6 , 9 , cincisprezece , 13 } ;
int i = 3 , j = 4 ;
std :: schimb ( arr [ i ] , arr [ j ] ) ;
pentru ( int i : arr ) {
std :: cout << i << ' ' ;
}
întoarcere 0 ;
}
Importând fișierul antet
Lista obținută după operația de schimbare prin utilizarea metodei std::swap este afișată după cum urmează:
Exemplul 3: Program folosind metoda std::iter_swap pentru a schimba
Utilizarea algoritmului std::iter_swap, care este listat în antetul algoritmului, este o opțiune suplimentară. Modul în care funcționează este prin comutarea valorilor obiectelor către care indică iteratoarele furnizate.
#include#include
#include
#include
int principal ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
int i = 0 , j = 4 ;
auto itr1 = std :: Următorul ( un lucru. ÎNCEPE ( ) , i ) ;
auto itr2 = std :: Următorul ( un lucru. ÎNCEPE ( ) , j ) ;
std :: iter_swap ( itr1 , itr2 ) ;
pentru ( int i : un lucru ) {
std :: cout << i << ' ' ;
}
întoarcere 0 ;
}
Pentru metoda principală a programului, am declarat o variabilă vectorială „vec” și i-am atribuit o listă vectorială de numere. Apoi, am specificat poziția indexului variabilei „i” și „j”. Este invocată metoda std::iter_swap care ia iter1 și iter2 ca argument. Iter1 și iter2 sunt declarate cu cuvântul cheie auto și au operația de iterație. Metoda buclă for imprimă valorile schimbate ale matricei vectoriale la execuție.
Metoda std::iter_swap a schimbat cu succes valorile vectorilor specificati.
Exemplul 4: Program de utilizare fără variabile temporare pentru a schimba
Acest exemplu arată o nouă modalitate de a schimba numerele în codul C++ fără utilizarea variabilelor temporare.
#includefolosind namespace std ;
int principal ( )
{
int x1 = Două , x2 = 12 ;
cout << — Înainte de a schimba. << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
cout << ' \n După schimb.' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;
întoarcere 0 ; }
Să examinăm funcționarea acestui program. Aici, am declarat x1 și x2, care sunt setate inițial cu numărul, respectiv. Apoi, folosind formula x1 = x1+ x2, adăugăm x1 și x2 și punem rezultatul în x1. Aceasta indică faptul că x1 este egal cu 2 plus 12. Prin urmare, acum este egal cu 14. Apoi, aplicăm formula x2 = x1 – x2. Aceasta indică faptul că x2 = 14 – 12. Prin urmare, x2 este acum egal cu 2. Încă o dată, aplicăm formula x1 = x1 – x2. Aceasta indică faptul că x1 = 14 – 2. Prin urmare, x1 = 12 la sfârșit. Drept urmare, numerele au fost schimbate.
Numărul schimbat înainte și după este afișat pe următorul ecran de solicitare.
Concluzie
Aici, trecem peste o descriere completă a swap() în C++, utilizarea sa și câteva exemple care arată cum funcționează. Folosind funcția std:: swap(), valorile a două variabile pot fi schimbate. C++ STL include o funcție încorporată numită std::swap(). În acest tutorial sunt explicate și funcția swap(T& variabila 1, T& variabila 2) apelurile prin referință, iar supraîncărcările C++ swap() în funcție de tipul variabilelor de date.