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
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.
#inclouutilitzant 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.