C++ Std Swap

C Std Swap



„Schimbarea este actul de a schimba două sau mai multe lucruri. Datele dintre două variabile în programare pot fi comutate. Schimbul de lucruri între două persoane este posibil în viața reală. Valorile oricăror două obiecte pot fi schimbate folosind funcția standard de bibliotecă swap() în C++. A fost plasat sub antetul „utilitate” în C11. Funcția swap() din C++ are o complexitate de N pentru matrice, deoarece fiecare element trebuie schimbat individual, în timp ce dificultatea funcției pentru constante este constantă. Funcția swap() aruncă un avertisment sau o eroare dacă oricare dintre elementele variabile eșuează. Uitați-vă la semnătura funcției pentru std::swap() de mai jos:

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 , putem accesa funcția de swap din programul nostru. Aici, am inclus fișierul antet cu încă două biblioteci importante. Apoi, am stabilit metoda int main. În interiorul programului principal, am declarat vectorul creând variabila „arr”. Variabila „arr” este inițializată cu cele cinci elemente ale numărului întreg. Pozițiile indexului sunt atribuite „i” și „j” pentru schimbare. Variabilele „i” și „j” sunt apoi transmise metodei std::swap pentru schimbarea valorii indexului specificat. Cu bucla for, am tipărit matricele schimbate.

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.

#include

folosind 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.