C++ standardvahetus

C Standardvahetus



„Vahetus on kahe või enama asja vahetamine. Programmeerimisel saab kahe muutuja vahelisi andmeid vahetada. Asjade vahetamine kahe inimese vahel on päriselus võimalik. Kahe objekti väärtusi saab vahetada standardse teegi funktsiooni swap() abil C++ keeles. See on paigutatud C11 päise 'utiliit' alla. C++-i funktsiooni swap() keerukus on massiivide jaoks N, kuna iga elementi tuleb eraldi vahetada, samas kui funktsiooni raskusaste konstantide puhul on konstantne. Funktsioon swap() annab hoiatuse või vea, kui mõni muutuja elementidest ebaõnnestub. Vaadake allolevat funktsiooni std::swap() allkirja:

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 importimisel pääseme oma programmis juurde vahetusfunktsioonile. Siin oleme lisanud päisefaili veel kahe olulisema teegiga. Seejärel oleme loonud peamise meetodi int. Programmi põhiprogrammis oleme deklareerinud vektori, luues muutuja 'arr'. Muutuja “arr” initsialiseeritakse täisarvu viie elemendiga. Indeksi positsioonid on vahetamiseks määratud 'i' ja 'j'-ga. Seejärel edastatakse muutujad “i” ja “j” määratud indeksi väärtuse vahetamiseks meetodile std::swap. For-tsükliga oleme printinud vahetatud massiivid.

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.

#include

kasutades 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.