Syntaksi:
sapluuna < luokka T > mitätön vaihtaa ( T & muuttuja_1 , T & muuttuja_2 ) ;Sekä ensimmäisen että toisen muuttujan arvot, jotka molemmat tallentavat arvoja, on vaihdettava. Funktio vain vaihtaa muuttujien arvoja; sillä ei ole tulosta.'
Swap()-funktion toiminta C++:ssa
Swap-toiminto on toteutettu C++:ssa käyttämällä seuraavia kolmea riviä.
Sapluuna mitätön vaihtaa ( T & i , T & j ) {
T temp = std :: liikkua ( i ) ;
i = std :: liikkua ( j ) ;
j = std :: liikkua ( temp ) ;
}
Lause 'T temp = std::move(i)'; tekee kopion elementistä 'i' ja monistaa sen. Tässä 'i = std::move(j)'; hylkää 'i':n alkuperäiset kohteet ja tallentaa 'j':n 'i'-kopion alkuperäisen 'j':n tilalle. Kaava 'j = std:: move(temp)'; tallenna 'i' temp-kloonilla ja poista temp-arvon identtinen sisältö. Poista myös temp-muuttuja, kun swap()-funktio on suoritettu.
Esimerkki 1: Ohjelmoi käyttämällä std::move-menetelmää Swap-tilaan
Kuten alla osoitetaan, voimme vaihtaa kaksi objektia käyttämällä C++11-ominaisuutta std::move.
#include
#sisällytä
sapluuna
mitätön vaihtaa ( T & a , T & b )
{
T temp = std :: liikkua ( a ) ;
a = std :: liikkua ( b ) ;
b = std :: liikkua ( temp ) ;
}
int pää ( )
{
std :: vektori lista = { 10 , 12 , 13 , viisitoista , 16 , 17 } ;
int i = 3 , j = 5 ;
vaihtaa ( lista [ i ] , lista [ j ] ) ;
varten ( int i : lista ) {
std :: cout << i << '' ;
}
palata 0 ; }
Meillä on malliilmoitus, jossa on objekti 'T'. Sen jälkeen olemme perustaneet toiminnon 'swapiksi'. Funktio ottaa kaksi parametria &a ja &b, tyyppiä 'T'. Sen seurauksena, että argumentit T& a, T& b viittaavat tai tallentavat välitetyn muuttujan osoitteen ja koskevat niitä suoraan ilman paluuta, swap(T& a, T& b)-funktiota kutsutaan viittauskutsuksi.
Void swapin sisällä olemme käyttäneet swap-algoritmia käyttämällä std::move-menetelmää. Sitten rakensimme ohjelman pääosan. Täällä olemme ilmoittaneet muuttujan 'list' ja alustaneet sen numeeristen arvojen luettelolla. Olemme asettanut arvot 'i' ja 'j' vaihtoa varten. Toisessa indeksissä oleva numeerinen arvo korvattiin viidennen indeksin numeerisella arvolla. Sitten kutsuimme swap-funktiota ja välitimme 'i'- ja 'j'-indeksit sille vaihtamista varten. For-silmukkaa käytetään vaihdetun luettelon tulostamiseen.
Tulos näyttää muokatun luettelon. Voit tarkkailla luodun uuden luettelon vaihtaneen arvon määritettyjen indeksien mukaan.
Esimerkki 2: Ohjelmoi std::swap-menetelmällä Swap
Apuohjelman otsikossa (C++11:ssä) olevan std::swap-mekanismin käyttäminen on tavallinen korjaus. Kahden kohteen arvoja vaihdetaan, jotta se toimisi.
#include#sisällytä
#sisällytä
int pää ( )
{
std :: vectorarr = { 3 , 6 , 9 , viisitoista , 13 } ;
int i = 3 , j = 4 ;
std :: vaihtaa ( arr [ i ] , arr [ j ] ) ;
varten ( int i : arr ) {
std :: cout << i << '' ;
}
palata 0 ;
}
Tuomalla otsikkotiedoston
Vaihtotoimenpiteen jälkeen std::swap-menetelmällä saatu luettelo näytetään seuraavasti:
Esimerkki 3: Ohjelmoi vaihtamiseen käyttämällä std::iter_swap-menetelmää
std::iter_swap-algoritmin käyttö, joka on lueteltu algoritmin otsikossa, on lisävaihtoehto. Se toimii vaihtamalla niiden objektien arvoja, joihin tarjotut iteraattorit osoittavat.
#include#sisällytä
#include
#include
int pää ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
int i = 0 , j = 4 ;
auto itr1 = std :: Seuraava ( asia. alkaa ( ) , i ) ;
auto itr2 = std :: Seuraava ( asia. alkaa ( ) , j ) ;
std :: iter_swap ( itr1 , itr2 ) ;
varten ( int i : asia ) {
std :: cout << i << '' ;
}
palata 0 ;
}
Ohjelman päämenetelmälle olemme ilmoittaneet vektorimuuttujan 'vec' ja määrittäneet sille vektoriluettelon numeroista. Sitten määritimme indeksin sijainnin muuttujille 'i' ja 'j'. Käytetään std::iter_swap-metodia, joka käyttää argumentteja iter1 ja iter2. Iter1 ja iter2 ilmoitetaan auto-avainsanalla ja niillä on iterointitoiminto. For loop -menetelmä tulostaa vektoritaulukon vaihdetut arvot suorituksen yhteydessä.
Metodi std::iter_swap vaihtoi onnistuneesti määritettyjen vektorien arvot.
Esimerkki 4: Ohjelma käyttää ilman väliaikaisia muuttujia vaihdettavaksi
Tämä esimerkki näyttää uuden tavan vaihtaa numeroita C++-koodissa ilman väliaikaisten muuttujien käyttöä.
#includekäyttäen nimiavaruutta std ;
int pää ( )
{
int x1 = kaksi , x2 = 12 ;
cout << 'Ennen vaihtoa.' << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
cout << ' \n Vaihdon jälkeen.' << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;
palata 0 ; }
Tarkastellaan tämän ohjelman toimintaa. Tässä olemme ilmoittaneet x1 ja x2, jotka on alun perin asetettu vastaavasti numerolla. Sitten kaavalla x1 = x1+ x2 lisäämme x1 ja x2 ja laitamme tuloksen x1:een. Tämä osoittaa, että x1 on yhtä kuin 2 plus 12. Siksi nyt on 14. Sitten sovelletaan kaavaa x2 = x1 – x2. Tämä osoittaa, että x2 = 14 – 12. Siksi x2 on nyt yhtä kuin 2. Käytämme vielä kerran kaavaa x1 = x1 – x2. Tämä osoittaa, että x1 = 14 – 2. Siksi x1 = 12 lopussa. Tämän seurauksena numeroita on vaihdettu.
Ennen ja jälkeen vaihdettu numero näkyy seuraavassa kehotenäytössä.
Johtopäätös
Tässä käymme läpi täydellisen kuvauksen swap():sta C++:ssa, sen käytöstä ja joitain esimerkkejä, jotka osoittavat sen toiminnan. Käyttämällä std:: swap()-funktiota voit vaihtaa kahden muuttujan arvoa. C++ STL sisältää sisäänrakennetun funktion nimeltä std::swap(). Tässä opetusohjelmassa selitetään myös swap(T&-muuttuja 1, T&-muuttuja 2)-funktio kutsuu viitteellä ja C++-ylikuormitus swap() datamuuttujien tyypistä riippuen.