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
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.
#includepomocí 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.