C++ Std swap

C Std Swap



„Výměna je akt výměny dvou nebo více věcí. Data mezi dvěma proměnnými v programování lze přepínat. Výměna věcí mezi dvěma osobami je v reálném životě možná. Hodnoty libovolných dvou objektů lze zaměnit pomocí standardní knihovní funkce swap() v C++. Byl umístěn pod hlavičkou „utility“ v C11. Funkce swap() v C++ má složitost N pro pole, protože každý prvek musí být zaměněn jednotlivě, zatímco obtížnost funkce pro konstanty je konstantní. Funkce swap() vyvolá varování nebo chybu, pokud některý z prvků proměnné selže. Podívejte se na podpis funkce pro std::swap() níže:

Syntax:

šablona < třída T > prázdnota vyměnit ( T & proměnná_1 , T & proměnná_2 ) ;

Hodnota první i druhé proměnné, které obě ukládají hodnoty, se mají prohodit. Funkce pouze přepíná hodnoty proměnných; nemá žádný výstup.'







Fungování funkce swap() v C++

Funkce swap je implementována v C++ pomocí následujících tří řádků.



Šablona prázdnota vyměnit ( T & i , T & j ) {
T tepl = std :: přestěhovat se ( i ) ;
i = std :: přestěhovat se ( j ) ;
j = std :: přestěhovat se ( tepl ) ;
}

Příkaz „T temp = std::move(i)“; vytvoří kopii prvku „i“ a duplikuje jej. Zde „i = std::move(j)“; zahodí původní položky „i“ a uloží kopii „i“ z „j“ místo původního „j“. Vzorec „j = std:: move(temp)“; uložte „i“ s klonem temp a odstraňte identický obsah temp. Po dokončení provádění funkce swap() také odstraňte proměnnou temp.



Příklad 1: Program používající metodu std::move k výměně

Jak je ukázáno níže, můžeme zaměnit dva objekty pomocí funkce C++11 std::move.





#include

#include



šablona
prázdnota vyměnit ( T & A , T & b )
{
T tepl = std :: přestěhovat se ( A ) ;
A = std :: přestěhovat se ( b ) ;
b = std :: přestěhovat se ( tepl ) ;
}
int hlavní ( )
{
std :: vektor seznam = { 10 , 12 , 13 , patnáct , 16 , 17 } ;
int i = 3 , j = 5 ;
vyměnit ( seznam [ i ] , seznam [ j ] ) ;
pro ( int i : seznam ) {
std :: cout << i << ' ' ;
}
vrátit se 0 ; }

Máme deklaraci šablony, která má objekt „T“. Poté jsme funkci zavedli jako „swap“. Funkce přebírá dva parametry &a a &b typu „T“. V důsledku toho, že argumenty T& a, T& b odkazují nebo ukládají adresu předávané proměnné a aplikují na ně přímo bez návratu, se funkce swap(T& a, T&b) nazývá volání odkazem.



Uvnitř void swapu jsme použili algoritmus swapování pomocí metody std::move. Poté jsme vytvořili hlavní program. Zde jsme deklarovali proměnnou „list“ a inicializovali ji seznamem číselných hodnot. Nastavili jsme hodnoty pro „i“ a „j“ pro výměnu. Číselná hodnota umístěná na druhém indexu byla nahrazena číselnou hodnotou na pátém indexu. Poté jsme zavolali funkci swap a předali jí indexy „i“ a „j“ k výměně. Smyčka for se používá pro tisk odloženého seznamu.

Výstup zobrazil upravený seznam. Můžete pozorovat, jak nový vygenerovaný seznam vyměnil hodnotu podle zadaných indexů.

Příklad 2: Program využívající metodu std::swap k výměně

Obvyklou opravou je použití mechanismu std::swap, který se nachází v hlavičce utility (v C++11). Hodnoty dvou objektů se přepnou, aby to fungovalo.

#include

#include

#include



int hlavní ( )
{
std :: vectorarr = { 3 , 6 , 9 , patnáct , 13 } ;
int i = 3 , j = 4 ;

std :: vyměnit ( arr [ i ] , arr [ j ] ) ;

pro ( int i : arr ) {
std :: cout << i << ' ' ;
}

vrátit se 0 ;
}

Importováním hlavičkového souboru můžeme v našem programu přistupovat k funkci swap. Zde jsme zahrnuli hlavičkový soubor se dvěma dalšími důležitými knihovnami. Poté jsme vytvořili metodu int main. V hlavní části programu jsme deklarovali vektor vytvořením proměnné „arr“. Proměnná „arr“ je inicializována pěti prvky celého čísla. Indexové pozice jsou přiřazeny k „i“ a „j“ pro výměnu. Proměnné „i“ a „j“ jsou pak předány metodě std::swap pro swap hodnoty zadaného indexu. Pomocí cyklu for jsme vytiskli prohozená pole.

Seznam získaný po operaci swap pomocí metody std::swap se zobrazí následovně:

Příklad 3: Program využívající metodu std::iter_swap k výměně

Další možností je použití algoritmu std::iter_swap, který je uveden v záhlaví algoritmu. Funguje to tak, že přepíná hodnoty objektů, na které poskytnuté iterátory ukazují.

#include

#include

#include

#include



int hlavní ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
int i = 0 , j = 4 ;
auto itr1 = std :: další ( věc. začít ( ) , i ) ;
auto itr2 = std :: další ( věc. začít ( ) , j ) ;

std :: iter_swap ( itr1 , itr2 ) ;
pro ( int i : věc ) {
std :: cout << i << ' ' ;
}
vrátit se 0 ;
}

K hlavní metodě programu jsme deklarovali vektorovou proměnnou „vec“ a přiřadili jí vektorový seznam čísel. Poté jsme specifikovali pozici indexu proměnných „i“ a „j“. Je vyvolána metoda std::iter_swap, která bere jako argument iter1 a iter2. Iter1 a iter2 jsou deklarovány pomocí klíčového slova auto a mají operaci iterace. Metoda cyklu for vytiskne při spuštění prohozené hodnoty vektorového pole.

Metoda std::iter_swap úspěšně zaměnila hodnoty zadaných vektorů.

Příklad 4: Program použití bez dočasných proměnných k výměně

Tento příklad ukazuje nový způsob záměny čísel v kódu C++ bez použití dočasných proměnných.

#include

pomocí jmenného prostoru std ;

int hlavní ( )
{
int x1 = dva , x2 = 12 ;
cout << 'Před výměnou.' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;

x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;

cout << ' \n Po výměně.' << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;

vrátit se 0 ; }

Podívejme se na fungování tohoto programu. Zde jsme deklarovali x1 a x2, které jsou zpočátku nastaveny s číslem, resp. Potom pomocí vzorce x1 = x1+ x2 sečteme x1 a x2 a výsledek vložíme do x1. To znamená, že x1 se rovná 2 plus 12. Proto se nyní rovná 14. Potom použijeme vzorec x2 = x1 – x2. To znamená, že x2 = 14 – 12. Proto se x2 nyní rovná 2. Ještě jednou použijeme vzorec x1 = x1 – x2. To znamená, že x1 = 14 – 2. Na konci tedy x1 = 12. V důsledku toho došlo k výměně čísel.

Číslo vyměněné před a za se zobrazí na následující obrazovce s výzvou.

Závěr

Zde si projdeme úplný popis swap() v C++, jeho použití a několik příkladů, které ukazují, jak funguje. Pomocí funkce std:: swap() lze přepínat hodnoty dvou proměnných. C++ STL obsahuje vestavěnou funkci nazvanou std::swap(). V tomto tutoriálu je také vysvětlena funkce swap(T& proměnná 1, T& proměnná 2) pomocí odkazu a přetížení C++ swap() v závislosti na typu datových proměnných.