Süntaks:
malli < klass T > tühine vahetus ( T & muutuja_1 , T & muutuja_2 ) ;Nii esimese muutuja kui ka teise muutuja väärtus, mis mõlemad salvestavad väärtusi, tuleb vahetada. Funktsioon lihtsalt vahetab muutujate väärtusi; sellel pole väljundit.'
Funktsiooni swap() töötamine C++ keeles
Vahetusfunktsiooni rakendatakse C++-s, kasutades järgmist kolme rida.
Mall tühine vahetus ( T & i , T & j ) {
T temp = std :: liigutada ( i ) ;
i = std :: liigutada ( j ) ;
j = std :: liigutada ( temp ) ;
}
Väide “T temp = std::move(i)”; teeb elemendist “i” koopia ja dubleerib selle. Siin 'i = std::move(j)'; hülgab 'i' originaalelemendid ja salvestab 'j' 'i' koopia originaali 'j' asemele. Valem “j = std:: liigu(temp)”; salvestage 'i' temp klooniga ja eemaldage temp identne sisu. Samuti kustutage ajutine muutuja pärast funktsiooni swap() täitmist.
Näide 1: Programmeerimine kasutades std::move meetodit Swap
Nagu allpool näidatud, saame kahte objekti vahetada, kasutades funktsiooni C++11 std::move.
#include
#include
malli
tühine vahetus ( T & a , T & b )
{
T temp = std :: liigutada ( a ) ;
a = std :: liigutada ( b ) ;
b = std :: liigutada ( temp ) ;
}
int peamine ( )
{
std :: vektor nimekirja = { 10 , 12 , 13 , viisteist , 16 , 17 } ;
int i = 3 , j = 5 ;
vahetus ( nimekirja [ i ] , nimekirja [ j ] ) ;
jaoks ( int i : nimekirja ) {
std :: cout << i << '' ;
}
tagasi 0 ; }
Meil on mallideklaratsioon, millel on objekt 'T'. Pärast seda oleme loonud funktsiooni 'vahetus'. Funktsioon võtab kaks 'T' tüüpi parameetrit &a ja &b. Argumentide T& a, T& b tulemusena, mis viitavad või salvestavad edasiantud muutuja aadressi ja rakenduvad neile otse ilma tagastamiseta, nimetatakse funktsiooni swap(T& a, T& b) viide kutsumiseks.
Tühivahetuse sees oleme rakendanud std::move meetodi abil vahetamise algoritmi. Seejärel koostasime programmi põhielemendid. Siin oleme deklareerinud muutuja 'list' ja lähtestanud selle arvväärtuste loendiga. Oleme vahetamiseks määranud 'i' ja 'j' väärtused. Teise indeksi numbriline väärtus asendati viienda indeksi arvväärtusega. Seejärel kutsusime vahetusfunktsiooni ja edastasime sellele vahetamiseks indeksid 'i' ja 'j'. Silmust for kasutatakse vahetatud loendi printimiseks.
Väljund kuvas muudetud loendi. Saate jälgida, kuidas uus loend genereerib väärtust vastavalt määratud indeksitele.
Näide 2: Programm kasutab std::swap meetodit vahetamiseks
Utiliidi päises leiduva std::swap mehhanismi kasutamine (C++11 keeles) on tavaline parandus. Kahe objekti väärtust vahetatakse, et see toimiks.
#include#include
#include
int peamine ( )
{
std :: vektorarr = { 3 , 6 , 9 , viisteist , 13 } ;
int i = 3 , j = 4 ;
std :: vahetus ( arr [ i ] , arr [ j ] ) ;
jaoks ( int i : arr ) {
std :: cout << i << '' ;
}
tagasi 0 ;
}
Päisefaili
Pärast std::swap meetodil tehtud vahetustoimingut saadud loend kuvatakse järgmiselt:
Näide 3: Programm kasutab vahetamiseks meetodit std::iter_swap
Täiendav valik on std::iter_swap algoritmi kasutamine, mis on loetletud algoritmi päises. Selle toimimise viis on nende objektide väärtuste vahetamine, millele pakutavad iteraatorid osutavad.
#include#include
#include
#include
int peamine ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
int i = 0 , j = 4 ;
auto itr1 = std :: järgmiseks ( asi. alustada ( ) , i ) ;
auto itr2 = std :: järgmiseks ( asi. alustada ( ) , j ) ;
std :: iter_swap ( itr1 , itr2 ) ;
jaoks ( int i : asi ) {
std :: cout << i << '' ;
}
tagasi 0 ;
}
Programmi põhimeetodi jaoks oleme deklareerinud vektormuutuja 'vec' ja määranud sellele numbrite vektorloendi. Seejärel määrasime indeksi positsiooni muutujatele 'i' ja 'j'. Käivitatakse meetod std::iter_swap, mis võtab argumendina iter1 ja iter2. Iter1 ja iter2 deklareeritakse automaatse märksõnaga ja neil on iteratsioonioperatsioon. For loop meetod prindib käivitamisel vektormassiivi vahetatud väärtused.
Meetod std::iter_swap vahetas edukalt määratud vektorite väärtused.
Näide 4: Programm ajutiste muutujateta vahetamiseks
See näide näitab uut viisi numbrite vahetamiseks C++ koodis ilma ajutisi muutujaid kasutamata.
#includekasutades nimeruumi std ;
int peamine ( )
{
int x1 = kaks , x2 = 12 ;
cout << 'Enne vahetust.' << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
cout << ' \n Pärast vahetust.' << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;
tagasi 0 ; }
Uurime selle programmi toimimist. Siin oleme deklareerinud x1 ja x2, mis on algselt seatud vastavalt numbriga. Seejärel lisame valemiga x1 = x1+ x2 x1 ja x2 ning paneme tulemuseks x1. See näitab, et x1 on võrdne 2 pluss 12. Seega võrdub nüüd 14. Seejärel rakendame valemit x2 = x1 – x2. See näitab, et x2 = 14 – 12. Seega on x2 nüüd võrdne 2-ga. Veel kord rakendame valemit x1 = x1 – x2. See näitab, et x1 = 14 – 2. Seega x1 = 12 lõpus. Selle tulemusena on numbrid ümber vahetatud.
Enne ja pärast vahetatud number kuvatakse järgmisel viipakuval.
Järeldus
Siin käsitleme swap() täielikku kirjeldust C++-s, selle kasutamist ja mõningaid näiteid, mis näitavad selle toimimist. Funktsiooni std:: swap() abil saab vahetada kahe muutuja väärtust. C++ STL sisaldab sisseehitatud funktsiooni nimega std::swap(). Selles õpetuses selgitatakse ka funktsiooni swap(T& muutuja 1, T& muutuja 2) viidetega ja C++ ülekoormusi swap() olenevalt andmemuutujate tüübist.