Intercanvi C++ Std

Intercanvi C Std



'Canviar és l'acte d'intercanviar dues o més coses. Les dades entre dues variables en programació es poden canviar. L'intercanvi de coses entre dues persones és possible a la vida real. Els valors de dos objectes es poden intercanviar mitjançant la funció de biblioteca estàndard swap() en C++. S'ha col·locat sota la capçalera 'utilitat' a C11. La funció swap() en C++ té una complexitat de N per a matrius perquè cada element s'ha d'intercanviar individualment, mentre que la dificultat de la funció per a constants és constant. La funció swap() llança un avís o un error si algun dels elements variables falla. Mireu la signatura de la funció per a std::swap() a continuació:

Sintaxi:

plantilla < classe T > buit intercanviar ( T & variable_1 , T & variable_2 ) ;

Tant el valor de la primera variable com de la segona variable, ambdós emmagatzemen valors, s'han d'intercanviar. La funció només canvia els valors de les variables; no té sortida'.







Funcionament de la funció swap() en C++

La funció d'intercanvi s'implementa en C++ utilitzant les tres línies següents.



Plantilla buit intercanviar ( T & i , T & j ) {
T temp = std :: moure's ( i ) ;
i = std :: moure's ( j ) ;
j = std :: moure's ( temp ) ;
}

La declaració 'T temp = std::move(i)'; fa una còpia de l'element 'i' i el duplica. Aquí, 'i = std::move(j)'; descarta els elements originals de 'i' i emmagatzema la còpia 'i' de 'j' en lloc de la 'j' original. La fórmula “j = std:: move(temp)”; deseu 'i' amb un clon de temp i elimineu el contingut idèntic de temp. A més, suprimiu la variable temporal un cop finalitzada l'execució de la funció swap().



Exemple 1: Programa que utilitza el mètode std::move per intercanviar

Com es demostra a continuació, podem intercanviar dos objectes mitjançant la característica C++11 std::move.





#inclou

#inclou



plantilla
buit intercanviar ( T & a , T & b )
{
T temp = std :: moure's ( a ) ;
a = std :: moure's ( b ) ;
b = std :: moure's ( temp ) ;
}
int principal ( )
{
std :: vector llista = { 10 , 12 , 13 , 15 , 16 , 17 } ;
int i = 3 , j = 5 ;
intercanviar ( llista [ i ] , llista [ j ] ) ;
per ( int i : llista ) {
std :: cout << i << ' ' ;
}
tornar 0 ; }

Tenim una plantilla de declaració que té un objecte 'T'. Després d'això, hem establert la funció com a 'intercanvi'. La funció pren els dos paràmetres &a i &b, de tipus “T”. Com a resultat dels arguments T& a, T& b que fan referència o emmagatzemen l'adreça de la variable passada i que s'hi apliquen directament sense tornar, la funció swap(T& a, T& b) s'anomena trucada per referència.



Dins del void swap, hem aplicat l'algorisme d'intercanvi mitjançant el mètode std::move. A continuació, vam construir el programa principal. Aquí, hem declarat la variable 'llista' i l'hem inicialitzat amb la llista de valors numèrics. Hem establert els valors per a la 'i' i la 'j' per intercanviar. El valor numèric situat al segon índex es va substituir pel valor numèric del cinquè índex. Aleshores, vam cridar la funció d'intercanvi i li vam passar els índexs 'i' i 'j' per canviar-los. El bucle for s'utilitza per imprimir la llista intercanviada.

La sortida mostrava la llista modificada. Podeu observar que la nova llista generada va canviar el valor segons els índexs especificats.

Exemple 2: Programa que utilitza el mètode std::swap per intercanviar

Utilitzar el mecanisme std::swap que es troba a la capçalera de la utilitat (en C++11) és la solució habitual. Els valors de dos objectes es canvien perquè funcionin.

#inclou

#inclou

#inclou



int principal ( )
{
std :: vectorarr = { 3 , 6 , 9 , 15 , 13 } ;
int i = 3 , j = 4 ;

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

per ( int i : arr ) {
std :: cout << i << ' ' ;
}

tornar 0 ;
}

En importar el fitxer de capçalera , podem accedir a la funció d'intercanvi del nostre programa. Aquí, hem inclòs el fitxer de capçalera amb dues biblioteques més importants. Aleshores, hem establert el mètode int main. Dins de la part principal del programa, hem declarat el vector creant la variable 'arr'. La variable 'arr' s'inicialitza amb els cinc elements de l'enter. Les posicions de l'índex s'assignen a la 'i' i la 'j' per canviar. Les variables 'i' i 'j' es passen llavors al mètode std::swap per a l'intercanvi del valor de l'índex especificat. Amb el bucle for, hem imprès les matrius intercanviades.

La llista obtinguda després de l'operació d'intercanvi mitjançant el mètode std::swap es mostra de la següent manera:

Exemple 3: Programa que utilitza el mètode std::iter_swap per intercanviar

L'ús de l'algorisme std::iter_swap, que apareix a la capçalera de l'algorisme, és una opció addicional. La manera com funciona és canviant els valors dels objectes als quals apunten els iteradors proporcionats.

#inclou

#inclou

#include

#inclou



int principal ( )
{
std :: vectorvec = { 64 , 61 , 62 , 63 , 60 } ;
int i = 0 , j = 4 ;
automàtic itr1 = std :: Pròxim ( una cosa. començar ( ) , i ) ;
automàtic itr2 = std :: Pròxim ( una cosa. començar ( ) , j ) ;

std :: iter_swap ( itr1 , itr2 ) ;
per ( int i : una cosa ) {
std :: cout << i << ' ' ;
}
tornar 0 ;
}

Al mètode principal del programa, hem declarat una variable vectorial 'vec' i li hem assignat una llista vectorial de números. Aleshores, vam especificar la posició de l'índex a la variable 'i' i 'j'. S'invoca el mètode std::iter_swap que pren els iter1 i iter2 com a argument. Els iter1 i iter2 es declaren amb la paraula clau auto i tenen l'operació d'iteració. El mètode de bucle for imprimeix els valors intercanviats de la matriu vectorial després de l'execució.

El mètode std::iter_swap ha intercanviat correctament els valors dels vectors especificats.

Exemple 4: Programa d'ús sense variables temporals per intercanviar

Aquest exemple mostra una nova manera d'intercanviar números en codi C++ sense l'ús de variables temporals.

#inclou

utilitzant l'espai de noms std ;

int principal ( )
{
int x1 = 2 , x2 = 12 ;
cout << 'Abans de canviar'. << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;

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

cout << ' \n Després de canviar'. << endl ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << endl ;

tornar 0 ; }

Examinem el funcionament d'aquest programa. Aquí, hem declarat x1 i x2, que inicialment s'estableixen amb el nombre, respectivament. Aleshores, utilitzant la fórmula x1 = x1+ x2, sumem x1 i x2 i posem el resultat en x1. Això indica que x1 és igual a 2 més 12. Per tant, ara és igual a 14. Aleshores, apliquem la fórmula x2 = x1 – x2. Això indica que x2 = 14 – 12. Per tant, ara x2 és igual a 2. Un cop més, apliquem la fórmula x1 = x1 – x2. Això indica que x1 = 14 – 2. Per tant, x1 = 12 al final. Com a resultat, els números s'han canviat.

El número intercanviat abans i després es mostra a la pantalla de sol·licitud següent.

Conclusió

Aquí, repassem una descripció completa de swap() en C++, el seu ús i alguns exemples que mostren com funciona. Mitjançant la funció std:: swap(), es poden canviar els valors de dues variables. El C++ STL inclou una funció integrada anomenada std::swap(). En aquest tutorial també s'expliquen les trucades de funció swap(T& variable 1, T& variable 2) per referència i les sobrecàrregues de C++ swap() en funció del tipus de variables de dades.