Sintassi:
modello < classe t > vuoto scambio ( T & variabile_1 , T & variabile_2 ) ;Sia il valore della prima variabile che della seconda variabile, che memorizzano entrambi i valori, devono essere scambiati. La funzione cambia solo i valori delle variabili; non ha output'.
Funzionamento della funzione swap() in C++
La funzione di scambio è implementata in C++ utilizzando le tre righe seguenti.
Modello vuoto scambio ( T & io , T & j ) {
T temp = std :: muoversi ( io ) ;
io = std :: muoversi ( j ) ;
j = std :: muoversi ( temp ) ;
}
L'istruzione “T temp = std::move(i)”; fa una copia dell'elemento 'i' e lo duplica. Qui, “i = std::move(j)”; scarta gli elementi originali di “i” e conserva la copia “i” di “j” al posto dell'originale “j”. La formula “j = std:: move(temp)”; salva 'i' con un clone di temp e rimuovi lo stesso contenuto di temp. Inoltre, eliminare la variabile temporanea al termine dell'esecuzione della funzione swap().
Esempio 1: Programma che utilizza il metodo std::move per scambiare
Come mostrato di seguito, possiamo scambiare due oggetti usando la funzionalità C++11 std::move.
#includi
#includi
modello
vuoto scambio ( T & un , T & b )
{
T temp = std :: muoversi ( un ) ;
un = std :: muoversi ( b ) ;
b = std :: muoversi ( temp ) ;
}
int principale ( )
{
std :: vettore elenco = { 10 , 12 , 13 , quindici , 16 , 17 } ;
int io = 3 , j = 5 ;
scambio ( elenco [ io ] , elenco [ j ] ) ;
per ( int io : elenco ) {
std :: cout << io << ' ' ;
}
Restituzione 0 ; }
Abbiamo una dichiarazione modello che ha un oggetto 'T'. Successivamente, abbiamo stabilito la funzione come 'swap'. La funzione prende i due parametri &a e &b, di tipo “T”. Come risultato degli argomenti T& a, T& b che fanno riferimento o memorizzano l'indirizzo della variabile passata e si applicano direttamente ad essa senza restituire, la funzione swap(T& a, T& b) è chiamata call by reference.
All'interno del void swap, abbiamo applicato l'algoritmo di scambio utilizzando il metodo std::move. Quindi, abbiamo costruito le principali del programma. Qui abbiamo dichiarato la variabile 'list' e l'abbiamo inizializzata con l'elenco dei valori numerici. Abbiamo impostato i valori per 'i' e 'j' per lo scambio. Il valore numerico situato al secondo indice è stato sostituito con il valore numerico al quinto indice. Quindi, abbiamo chiamato la funzione di scambio e gli abbiamo passato gli indici 'i' e 'j' per lo scambio. Il ciclo for viene utilizzato per stampare l'elenco scambiato.
L'output mostrava l'elenco modificato. Puoi osservare che il nuovo elenco generato ha scambiato il valore in base agli indici specificati.
Esempio 2: Programma che utilizza il metodo std::swap per scambiare
L'utilizzo del meccanismo std::swap che si trova nell'intestazione dell'utilità (in C++11) è la solita soluzione. I valori di due oggetti vengono scambiati per farlo funzionare.
#includi#includi
#include
int principale ( )
{
std :: vettorearr = { 3 , 6 , 9 , quindici , 13 } ;
int io = 3 , j = 4 ;
std :: scambio ( arr [ io ] , arr [ j ] ) ;
per ( int io : arr ) {
std :: cout << io << ' ' ;
}
Restituzione 0 ;
}
Importando il file di intestazione
L'elenco ottenuto dopo l'operazione di scambio utilizzando il metodo std::swap viene visualizzato come segue:
Esempio 3: Programma che utilizza il metodo std::iter_swap per lo scambio
L'uso dell'algoritmo std::iter_swap, che è elencato nell'intestazione dell'algoritmo, è un'opzione aggiuntiva. Il modo in cui funziona è cambiare i valori degli oggetti a cui puntano gli iteratori forniti.
#includi#includi
#include
#include
int principale ( )
{
std :: vettorevec = { 64 , 61 , 62 , 63 , 60 } ;
int io = 0 , j = 4 ;
auto itr1 = std :: prossimo ( una cosa. inizio ( ) , io ) ;
auto itr2 = std :: prossimo ( una cosa. inizio ( ) , j ) ;
std :: iter_swap ( itr1 , itr2 ) ;
per ( int io : una cosa ) {
std :: cout << io << ' ' ;
}
Restituzione 0 ;
}
Al metodo principale del programma, abbiamo dichiarato una variabile vettoriale 'vec' e le abbiamo assegnato un elenco vettoriale di numeri. Quindi, abbiamo specificato la posizione dell'indice nelle variabili “i” e “j”. Viene richiamato il metodo std::iter_swap che accetta iter1 e iter2 come argomento. Iter1 e iter2 sono dichiarati con la parola chiave auto e hanno l'operazione di iterazione. Il metodo for loop stampa i valori scambiati dell'array vettoriale al momento dell'esecuzione.
Il metodo std::iter_swap ha scambiato con successo i valori dei vettori specificati.
Esempio 4: programma di utilizzo senza variabili temporanee da scambiare
Questo esempio mostra un nuovo modo di scambiare i numeri nel codice C++ senza l'uso di variabili temporanee.
#includiusando lo spazio dei nomi std ;
int principale ( )
{
int x1 = Due , x2 = 12 ;
cout << 'Prima di scambiare.' << fine ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << fine ;
x1 = x1 + x2 ;
x2 = x1 - x2 ;
x1 = x1 * x2 ;
cout << ' \n Dopo lo scambio'. << fine ;
cout << 'x1 = ' << x1 << ', x2 = ' << x2 << fine ;
Restituzione 0 ; }
Esaminiamo il funzionamento di questo programma. Qui abbiamo dichiarato x1 e x2, che inizialmente sono impostati rispettivamente con il numero. Quindi, usando la formula x1 = x1+ x2, aggiungiamo x1 e x2 e mettiamo il risultato in x1. Ciò indica che x1 è uguale a 2 più 12. Pertanto, ora è uguale a 14. Quindi, applichiamo la formula x2 = x1 – x2. Ciò indica che x2 = 14 – 12. Pertanto, x2 è ora uguale a 2. Ancora una volta, applichiamo la formula x1 = x1 – x2. Ciò indica che x1 = 14 – 2. Pertanto, x1 = 12 alla fine. Di conseguenza, i numeri sono stati scambiati.
Il numero scambiato prima e dopo viene visualizzato nella seguente schermata di richiesta.
Conclusione
Qui, esaminiamo una descrizione completa di swap() in C++, il suo utilizzo e alcuni esempi che mostrano come funziona. Usando la funzione std:: swap(), è possibile scambiare i valori di due variabili. Il C++ STL include una funzione incorporata chiamata std::swap(). In questo tutorial vengono spiegati anche la funzione swap(T& variabile 1, T& variabile 2) per riferimento e gli overload C++ swap() a seconda del tipo di variabili di dati.