C++ Std swap

C Std Swap



„Výmena je akt výmeny dvoch alebo viacerých vecí. Dáta medzi dvoma premennými v programovaní je možné prepínať. Výmena vecí medzi dvoma osobami je možná v reálnom živote. Hodnoty ľubovoľných dvoch objektov je možné zameniť pomocou štandardnej knižničnej funkcie swap() v C++. Bol umiestnený pod hlavičkou „utility“ v C11. Funkcia swap() v C++ má pre polia zložitosť N, pretože každý prvok sa musí zamieňať jednotlivo, pričom náročnosť funkcie pre konštanty je konštantná. Funkcia swap() vyvolá varovanie alebo chybu, ak niektorý z premenných prvkov zlyhá. Pozrite sa na podpis funkcie pre std::swap() nižšie:

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 môžeme v našom programe pristupovať k funkcii swap. Tu sme zahrnuli hlavičkový súbor s dvoma ďalšími dôležitými knižnicami. Potom sme vytvorili metódu int main. V hlavnom programe programu sme deklarovali vektor vytvorením premennej „arr“. Premenná „arr“ je inicializovaná piatimi prvkami celého čísla. Indexové pozície sú priradené k „i“ a „j“ na výmenu. Premenné „i“ a „j“ sa potom odovzdajú metóde std::swap na výmenu hodnoty zadaného indexu. Pomocou cyklu for sme vytlačili vymenené polia.

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.

#include

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