C++ Std Swap

C Std Swap



“Lo scambio è l'atto di scambiare due o più cose. I dati tra due variabili nella programmazione possono essere scambiati. Lo scambio di cose tra due persone è possibile nella vita reale. I valori di due oggetti qualsiasi possono essere scambiati utilizzando la funzione di libreria standard swap() in C++. È stato posizionato sotto l'intestazione 'utilità' in C11. La funzione swap() in C++ ha una complessità di N per gli array perché ogni elemento deve essere scambiato individualmente, mentre la difficoltà della funzione per le costanti è costante. La funzione swap() genera un avviso o un errore se uno qualsiasi degli elementi variabili ha esito negativo. Guarda la firma della funzione per std::swap() di seguito:

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 , possiamo accedere alla funzione di scambio nel nostro programma. Qui, abbiamo incluso il file di intestazione con altre due importanti librerie. Quindi, abbiamo stabilito il metodo int main. All'interno del main del programma, abbiamo dichiarato il vettore creando la variabile “arr”. La variabile “arr” viene inizializzata con i cinque elementi dell'intero. Le posizioni dell'indice sono assegnate alla 'i' e alla 'j' per lo scambio. Le variabili “i” e “j” vengono quindi passate al metodo std::swap per lo scambio del valore dell'indice specificato. Con il ciclo for, abbiamo stampato gli array scambiati.

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.

#includi

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