Sintaksa:
šablona < klasa T > poništiti zamijeniti ( T i varijabla_1 , T i varijabla_2 ) ;I vrijednost prve varijable i druge varijable, koje obje pohranjuju vrijednosti, moraju se zamijeniti. Funkcija samo mijenja vrijednosti varijabli; nema izlaza.”
Rad swap() funkcije u C++
Funkcija zamjene implementirana je u C++ pomoću sljedeća tri retka.
Predložak poništiti zamijeniti ( T i ja , T i j ) {
T temp = std :: potez ( ja ) ;
ja = std :: potez ( j ) ;
j = std :: potez ( temp ) ;
}
Izjava “T temp = std::move(i)”; pravi kopiju elementa “i” i duplicira je. Ovdje, “i = std::move(j)”; odbacuje izvorne stavke 'i' i pohranjuje 'i' kopiju 'j' umjesto izvornog 'j'. Formula “j = std:: move(temp)”; spremite “i” s klonom temp i uklonite identičan sadržaj temp. Također, izbrišite privremenu varijablu nakon dovršetka izvođenja funkcije swap().
Primjer 1: Program koji koristi metodu std::move za zamjenu
Kao što je prikazano u nastavku, možemo zamijeniti dva objekta koristeći C++11 značajku std::move.
#include
#uključi
šablona
poništiti zamijeniti ( T i a , T i b )
{
T temp = std :: potez ( a ) ;
a = std :: potez ( b ) ;
b = std :: potez ( temp ) ;
}
int glavni ( )
{
std :: vektor popis = { 10 , 12 , 13 , petnaest , 16 , 17 } ;
int ja = 3 , j = 5 ;
zamijeniti ( popis [ ja ] , popis [ j ] ) ;
za ( int ja : popis ) {
std :: cout << ja << ' ' ;
}
povratak 0 ; }
Imamo deklaraciju predloška koja ima objekt 'T'. Nakon toga uspostavili smo funkciju kao 'swap'. Funkcija uzima dva parametra &a i &b, tipa 'T'. Kao rezultat argumenata T& a, T& b koji referenciraju ili pohranjuju adresu proslijeđene varijable i izravno se primjenjuju na njih bez vraćanja, funkcija swap(T& a, T& b) naziva se pozivom po referenci.
Unutar void swapa primijenili smo algoritam swapa pomoću metode std::move. Zatim smo konstruirali glavni program. Ovdje smo deklarirali varijablu 'list' i inicijalizirali je popisom numeričkih vrijednosti. Postavili smo vrijednosti za “i” i “j” za zamjenu. Numerička vrijednost koja se nalazi na drugom indeksu zamijenjena je numeričkom vrijednošću na petom indeksu. Zatim smo pozvali funkciju swap i proslijedili joj indekse 'i' i 'j' za swap. For petlja se koristi za ispis zamijenjene liste.
Izlaz je prikazao modificirani popis. Možete vidjeti kako novi generirani popis mijenja vrijednost prema navedenim indeksima.
Primjer 2: Program koji koristi std::swap metodu za zamjenu
Korištenje mehanizma std::swap koji se nalazi u zaglavlju uslužnog programa (u C++11) uobičajeni je popravak. Vrijednosti dviju objekata mijenjaju se kako bi funkcionirao.
#include#uključi
#include
int glavni ( )
{
std :: vektorarr = { 3 , 6 , 9 , petnaest , 13 } ;
int ja = 3 , j = 4 ;
std :: zamijeniti ( arr [ ja ] , arr [ j ] ) ;
za ( int ja : arr ) {
std :: cout << ja << ' ' ;
}
povratak 0 ;
}
Uvozom datoteke zaglavlja
Popis dobiven nakon operacije zamjene pomoću metode std::swap prikazuje se na sljedeći način:
Primjer 3: Program koji koristi std::iter_swap metodu za zamjenu
Korištenje algoritma std::iter_swap, koji je naveden u zaglavlju algoritma, dodatna je opcija. Način na koji funkcionira je prebacivanje vrijednosti objekata na koje navedeni iteratori pokazuju.
#include#uključi
#include
#include
int glavni ( )
{
std :: vektorvec = { 64 , 61 , 62 , 63 , 60 } ;
int ja = 0 , j = 4 ;
auto itr1 = std :: Sljedeći ( stvar. početi ( ) , ja ) ;
auto itr2 = std :: Sljedeći ( stvar. početi ( ) , j ) ;
std :: iter_swap ( itr1 , itr2 ) ;
za ( int ja : stvar ) {
std :: cout << ja << ' ' ;
}
povratak 0 ;
}
Glavnoj metodi programa deklarirali smo vektorsku varijablu 'vec' i dodijelili joj vektorsku listu brojeva. Zatim smo odredili poziciju indeksa za varijable “i” i “j”. Poziva se metoda std::iter_swap koja uzima iter1 i iter2 kao argument. Iter1 i iter2 deklarirani su ključnom riječi auto i imaju operaciju iteracije. Metoda for petlje ispisuje zamijenjene vrijednosti vektorskog polja nakon izvođenja.
Metoda std::iter_swap uspješno je zamijenila vrijednosti navedenih vektora.
Primjer 4: Program korištenja bez privremenih varijabli za zamjenu
Ovaj primjer pokazuje novi način zamjene brojeva u C++ kodu bez upotrebe privremenih varijabli.
#includekoristeći prostor imena std ;
int glavni ( )
{
int x1 = dva , x2 = 12 ;
cout << 'Prije zamjene.' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
cout << ' \n Nakon zamjene.' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;
povratak 0 ; }
Ispitajmo rad ovog programa. Ovdje smo deklarirali x1 i x2, koji su inicijalno postavljeni s brojem. Zatim pomoću formule x1 = x1+ x2 zbrajamo x1 i x2 i rezultat stavljamo u x1. To znači da je x1 jednako 2 plus 12. Dakle, sada je jednako 14. Zatim primjenjujemo formulu x2 = x1 – x2. To znači da je x2 = 14 – 12. Stoga je x2 sada jednako 2. Još jednom primjenjujemo formulu x1 = x1 – x2. To znači da je x1 = 14 – 2. Dakle, x1 = 12 na kraju. Kao rezultat toga, brojevi su zamijenjeni.
Broj zamijenjen prije i poslije prikazan je na sljedećem zaslonu.
Zaključak
Ovdje ćemo pregledati potpuni opis swap() u C++, njegovu upotrebu i neke primjere koji pokazuju kako funkcionira. Pomoću funkcije std:: swap() mogu se mijenjati vrijednosti dviju varijabli. C++ STL uključuje ugrađenu funkciju koja se zove std::swap(). Funkcija swap(T& varijabla 1, T& varijabla 2) poziva po referenci, a C++ preopterećenja swap() ovisno o vrsti podatkovnih varijabli također su objašnjeni u ovom vodiču.