C++ Std Swap

C Std Swap



„Pakeitimas yra dviejų ar daugiau dalykų apsikeitimas. Duomenys tarp dviejų programavimo kintamųjų gali būti perjungti. Dviejų asmenų apsikeitimas daiktais įmanomas realiame gyvenime. Bet kurios dviejų objektų reikšmės gali būti pakeistos naudojant standartinę bibliotekos funkciją swap() C++. Jis buvo patalpintas po antrašte „naudingumas“ C11. C++ funkcijos swap() sudėtingumas yra N masyvams, nes kiekvienas elementas turi būti keičiamas atskirai, o konstantų funkcijos sudėtingumas yra pastovus. Funkcija swap() pateikia įspėjimą arba klaidą, jei kuris nors iš kintamųjų elementų nepavyksta. Pažiūrėkite į std::swap() funkcijos parašą žemiau:

Sintaksė:

šabloną < T klasė > tuštuma apsikeisti ( T & kintamasis_1 , T & kintamasis_2 ) ;

Tiek pirmojo kintamojo, tiek antrojo kintamojo reikšmės, abiejose saugomos reikšmės, turi būti sukeistos. Funkcija tiesiog perjungia kintamųjų reikšmes; jis neturi jokios išvesties“.







Swap() funkcijos veikimas C++

Apsikeitimo funkcija įgyvendinama C++ naudojant šias tris eilutes.



Šablonas tuštuma apsikeisti ( T & i , T & j ) {
T temp = std :: judėti ( i ) ;
i = std :: judėti ( j ) ;
j = std :: judėti ( temp ) ;
}

Teiginys „T temp = std::move(i)“; padaro elemento „i“ kopiją ir ją dubliuoja. Čia „i = std::move(j)“; atmeta originalius „i“ elementus ir išsaugo „i“ „j“ kopiją vietoje originalo „j“. Formulė „j = std:: move(temp)“; išsaugokite 'i' su temp klonu ir pašalinkite identišką temp turinį. Be to, ištrinkite temp kintamąjį, kai bus atlikta swap() funkcija.



1 pavyzdys: Programa naudojant std::move metodą į Swap

Kaip parodyta toliau, galime sukeisti du objektus naudodami C++11 funkciją std::move.





#include

#įtraukti



šabloną
tuštuma apsikeisti ( T & a , T & b )
{
T temp = std :: judėti ( a ) ;
a = std :: judėti ( b ) ;
b = std :: judėti ( temp ) ;
}
tarpt pagrindinis ( )
{
std :: vektorius sąrašą = { 10 , 12 , 13 , penkiolika , 16 , 17 } ;
tarpt i = 3 , j = 5 ;
apsikeisti ( sąrašą [ i ] , sąrašą [ j ] ) ;
dėl ( tarpt i : sąrašą ) {
std :: cout << i << '' ;
}
grąžinti 0 ; }

Mes turime deklaracijos šabloną, kurio objektas yra „T“. Po to nustatėme funkciją kaip „swap“. Funkcija paima du „T“ tipo parametrus &a ir &b. Dėl argumentų T& a, T& b, nurodančių arba išsaugant perduodamo kintamojo adresą ir tiesiogiai jiems taikant negrąžinant, funkcija swap(T& a, T& b) vadinama iškvietimu pagal nuorodą.



Tuščiojo apsikeitimo viduje pritaikėme keitimo algoritmą naudodami std::move metodą. Tada mes sukūrėme pagrindinę programą. Čia mes paskelbėme kintamąjį „list“ ir inicijavome jį skaitinių reikšmių sąrašu. Nustatėme „i“ ir „j“ reikšmes apsikeitimui. Antrajame indekse esanti skaitinė reikšmė buvo pakeista skaitine reikšme penktame indekse. Tada iškvietėme apsikeitimo funkciją ir perdavėme jai indeksus „i“ ir „j“, kad būtų galima pakeisti. Ciklas for naudojamas sukeistų sąrašo spausdinimui.

Išvestyje buvo rodomas pakeistas sąrašas. Galite stebėti, kaip sukurtas naujas sąrašas pakeistas verte pagal nurodytus indeksus.

2 pavyzdys: Programa naudojant std::swap metodą sukeisti

Įprastas sprendimas yra naudoti std::swap mechanizmą, esantį paslaugų antraštėje (C++11). Dviejų objektų reikšmės perjungiamos, kad jis veiktų.

#include

#įtraukti

#include



tarpt pagrindinis ( )
{
std :: vektorarr = { 3 , 6 , 9 , penkiolika , 13 } ;
tarpt i = 3 , j = 4 ;

std :: apsikeisti ( arr [ i ] , arr [ j ] ) ;

dėl ( tarpt i : arr ) {
std :: cout << i << '' ;
}

grąžinti 0 ;
}

Importuodami antraštės failą , savo programoje galime pasiekti apsikeitimo funkciją. Čia įtraukėme antraštės failą su dar dviem svarbiomis bibliotekomis. Tada mes nustatėme pagrindinį metodą. Pagrindinėje programos dalyje mes paskelbėme vektorių, sukurdami kintamąjį „arr“. Kintamasis „arr“ inicijuojamas penkiais sveikojo skaičiaus elementais. Indekso pozicijos priskiriamos „i“ ir „j“ keitimui. Tada kintamieji „i“ ir „j“ perduodami std::swap metodui, kad būtų pakeista nurodyto indekso reikšmė. Naudodami for kilpą išspausdinome sukeistus masyvus.

Sąrašas, gautas po keitimo operacijos naudojant std::swap metodą, rodomas taip:

3 pavyzdys: Programa naudojant std::iter_swap metodą keisti

Papildoma parinktis yra std::iter_swap algoritmo, kuris yra nurodytas algoritmo antraštėje, naudojimas. Jis veikia perjungiant objektų, į kuriuos nurodo pateikti iteratoriai, vertes.

#include

#įtraukti

#include

#include



tarpt pagrindinis ( )
{
std :: vektorvec = { 64 , 61 , 62 , 63 , 60 } ;
tarpt i = 0 , j = 4 ;
automatinis itr1 = std :: Kitas ( dalykas. pradėti ( ) , i ) ;
automatinis itr2 = std :: Kitas ( dalykas. pradėti ( ) , j ) ;

std :: iter_swap ( itr1 , itr2 ) ;
dėl ( tarpt i : dalykas ) {
std :: cout << i << '' ;
}
grąžinti 0 ;
}

Pagrindiniam programos metodui paskelbėme vektorinį kintamąjį „vec“ ir priskyrėme jam vektorinį skaičių sąrašą. Tada mes nurodėme indekso poziciją kintamiesiems „i“ ir „j“. Iškviečiamas std::iter_swap metodas, kuris kaip argumentą priima iter1 ir iter2. Iter1 ir iter2 yra deklaruojami naudojant automatinį raktinį žodį ir atlieka iteracijos operaciją. For ciklo metodas vykdymo metu spausdina sukeistas vektorių masyvo reikšmes.

Metodas std::iter_swap sėkmingai pakeitė nurodytų vektorių reikšmes.

4 pavyzdys: Naudojimo be laikinųjų kintamųjų programa

Šiame pavyzdyje parodytas naujas būdas pakeisti skaičius C++ kode nenaudojant laikinųjų kintamųjų.

#include

naudojant vardų sritį std ;

tarpt pagrindinis ( )
{
tarpt x1 = du , x2 = 12 ;
cout << 'Prieš apsikeitimą'. << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;

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

cout << \n Po keitimo“. << endl ;
cout << 'x1 =' << x1 << ', x2 = ' << x2 << endl ;

grąžinti 0 ; }

Panagrinėkime šios programos veikimą. Čia mes paskelbėme x1 ir x2, kurie iš pradžių nustatomi atitinkamai skaičiumi. Tada, naudodami formulę x1 = x1+ x2, pridedame x1 ir x2, o rezultatą įdedame į x1. Tai rodo, kad x1 yra lygus 2 plius 12. Todėl dabar lygus 14. Tada taikome formulę x2 = x1 – x2. Tai rodo, kad x2 = 14 – 12. Todėl x2 dabar yra lygus 2. Dar kartą taikome formulę x1 = x1 – x2. Tai rodo, kad x1 = 14 – 2. Todėl pabaigoje x1 = 12. Dėl to numeriai buvo pakeisti.

Skaičius, pakeistas prieš ir po, rodomas kitame raginimo ekrane.

Išvada

Čia apžvelgsime visą swap () aprašymą C++, jo naudojimą ir keletą pavyzdžių, parodančių, kaip jis veikia. Naudojant std:: swap() funkciją, galima perjungti dvi kintamųjų reikšmes. C++ STL yra integruota funkcija, vadinama std::swap(). Swap (T& kintamasis 1, T& kintamasis 2) funkcija iškviečiama pagal nuorodą, o C++ perkrovos swap(), priklausomai nuo duomenų kintamųjų tipo, taip pat paaiškinta šioje pamokoje.