Syntax:
šablóna < trieda T > neplatné vymeniť ( T & premenná_1 , T & premenná_2 ) ;Hodnota prvej premennej aj druhej premennej, pričom obe ukladajú hodnoty, sa majú vymeniť. Funkcia len prepína hodnoty premenných; nemá žiadny výstup.'
Fungovanie funkcie swap() v C++
Funkcia swap je implementovaná v C++ pomocou nasledujúcich troch riadkov.
Šablóna neplatné vymeniť ( T & i , T & j ) {
T tepl = std :: pohybovať sa ( i ) ;
i = std :: pohybovať sa ( j ) ;
j = std :: pohybovať sa ( tepl ) ;
}
Výrok „T temp = std::move(i)“; vytvorí kópiu prvku „i“ a duplikuje ho. Tu „i = std::move(j)“; zahodí pôvodné položky „i“ a uloží kópiu „i“ z „j“ namiesto pôvodného „j“. Vzorec „j = std:: move(temp)“; uložte „i“ s klonom temp a odstráňte rovnaký obsah temp. Po dokončení vykonávania funkcie swap() tiež odstráňte premennú temp.
Príklad 1: Program využívajúci metódu std::move na výmenu
Ako je ukázané nižšie, môžeme zameniť dva objekty pomocou funkcie C++11 std::move.
#include
#include
šablóna
neplatné vymeniť ( T & a , T & b )
{
T tepl = std :: pohybovať sa ( a ) ;
a = std :: pohybovať sa ( b ) ;
b = std :: pohybovať sa ( tepl ) ;
}
int hlavné ( )
{
std :: vektor zoznam = { 10 , 12 , 13 , pätnásť , 16 , 17 } ;
int i = 3 , j = 5 ;
vymeniť ( zoznam [ i ] , zoznam [ j ] ) ;
pre ( int i : zoznam ) {
std :: cout << i << ' ' ;
}
vrátiť 0 ; }
Máme deklaráciu šablóny, ktorá má objekt „T“. Potom sme zriadili funkciu ako „swap“. Funkcia má dva parametre &a a &b typu „T“. V dôsledku toho, že argumenty T& a, T& b odkazujú alebo ukladajú adresu odovzdávanej premennej a aplikujú sa na ne priamo bez vrátenia, funkcia swap (T& a, T& b) sa nazýva volanie odkazom.
Vo vnútri void swapu sme použili algoritmus swapovania pomocou metódy std::move. Potom sme vytvorili hlavný program. Tu sme deklarovali premennú „zoznam“ a inicializovali sme ju zoznamom číselných hodnôt. Nastavili sme hodnoty pre „i“ a „j“ na výmenu. Číselná hodnota umiestnená na druhom indexe bola nahradená číselnou hodnotou na piatom indexe. Potom sme zavolali funkciu swap a odovzdali sme jej indexy „i“ a „j“ na výmenu. Cyklus for sa používa na tlač vymeneného zoznamu.
Na výstupe sa zobrazil upravený zoznam. Môžete pozorovať, ako nový vygenerovaný zoznam vymenil hodnotu podľa špecifikovaných indexov.
Príklad 2: Program využívajúci metódu std::swap na výmenu
Obvyklou opravou je použitie mechanizmu std::swap, ktorý sa nachádza v hlavičke pomôcky (v C++11). Hodnoty dvoch objektov sa prepnú, aby to fungovalo.
#include#include
#include
int hlavné ( )
{
std :: vectorarr = { 3 , 6 , 9 , pätnásť , 13 } ;
int i = 3 , j = 4 ;
std :: vymeniť ( arr [ i ] , arr [ j ] ) ;
pre ( int i : arr ) {
std :: cout << i << ' ' ;
}
vrátiť 0 ;
}
Importovaním hlavičkového súboru
Zoznam získaný po operácii výmeny pomocou metódy std::swap sa zobrazí takto:
Príklad 3: Program využívajúci metódu std::iter_swap na výmenu
Dodatočnou možnosťou je použitie algoritmu std::iter_swap, ktorý je uvedený v hlavičke algoritmu. Funguje to tak, že prepína hodnoty objektov, na ktoré ukazujú poskytnuté iterátory.
#include#include
#include
#include
int hlavné ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
int i = 0 , j = 4 ;
auto itr1 = std :: Ďalšie ( vec. začať ( ) , i ) ;
auto itr2 = std :: Ďalšie ( vec. začať ( ) , j ) ;
std :: iter_swap ( itr1 , itr2 ) ;
pre ( int i : vec ) {
std :: cout << i << ' ' ;
}
vrátiť 0 ;
}
K hlavnej metóde programu sme deklarovali vektorovú premennú „vec“ a priradili sme jej vektorový zoznam čísel. Potom sme špecifikovali pozíciu indexu premennej „i“ a „j“. Vyvolá sa metóda std::iter_swap, ktorá berie ako argument iter1 a iter2. Iter1 a iter2 sú deklarované pomocou kľúčového slova auto a majú operáciu iterácie. Metóda cyklu for vytlačí pri spustení zamenené hodnoty vektorového poľa.
Metóda std::iter_swap úspešne vymenila hodnoty zadaných vektorov.
Príklad 4: Program používania bez dočasných premenných na výmenu
Tento príklad ukazuje nový spôsob výmeny čísel v kóde C++ bez použitia dočasných premenných.
#includepomocou menného priestoru std ;
int hlavné ( )
{
int x1 = dva , x2 = 12 ;
cout << 'Pred výmenou.' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
cout << ' \n Po výmene.' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;
vrátiť 0 ; }
Pozrime sa na fungovanie tohto programu. Tu sme deklarovali x1 a x2, ktoré sú na začiatku nastavené s číslom, resp. Potom pomocou vzorca x1 = x1+ x2 pridáme x1 a x2 a výsledok vložíme do x1. To znamená, že x1 sa rovná 2 plus 12. Preto sa teraz rovná 14. Potom použijeme vzorec x2 = x1 – x2. To znamená, že x2 = 14 – 12. Preto sa x2 teraz rovná 2. Ešte raz použijeme vzorec x1 = x1 – x2. To znamená, že x1 = 14 – 2. Preto x1 = 12 na konci. V dôsledku toho sa čísla vymenili.
Číslo zamenené pred a za sa zobrazí na nasledujúcej obrazovke s výzvou.
Záver
Tu si prejdeme úplný popis swap() v C++, jeho použitie a niekoľko príkladov, ktoré ukazujú, ako funguje. Pomocou funkcie std:: swap() je možné prepínať hodnoty dvoch premenných. C++ STL obsahuje vstavanú funkciu s názvom std::swap(). Funkcia swap(T& premenná 1, T& premenná 2) volá odkazom a v tomto návode je vysvetlené aj preťaženie C++ swap() v závislosti od typu dátových premenných.