Shuffle() vs random_shuffle() in C++

Shuffle Vs Random Shuffle In C



In C++, la libreria standard fornisce due funzioni, mescola() E random_shuffle() che servono per riordinare gli elementi di un contenitore. Sebbene entrambe le funzioni abbiano lo stesso scopo, differiscono nella loro implementazione e nel modo in cui generano numeri casuali.

Da questo articolo troverai le differenze tra queste due funzioni e capirai come funzionano.

shuffle() in C++

IL mescola() function è una funzione C++ incorporata utilizzata per mescolare o riorganizzare in modo casuale gli elementi in un determinato intervallo. La funzione è dichiarata nel file file di intestazione e ha due argomenti: la posizione iniziale dell'intervallo è il primo argomento e il secondo argomento rappresenta la posizione finale.







Inoltre, accetta anche un terzo parametro facoltativo, che è un oggetto funzione che genera numeri casuali da utilizzare per mischiare gli elementi nell'intervallo.



Quando il mescola() viene chiamata la funzione, riordina in modo casuale gli elementi nell'intervallo specificato utilizzando il generatore di numeri casuali fornito. Il risultato dello shuffle non è prevedibile ed è altrettanto probabile che si verifichi ogni possibile permutazione degli elementi.



Esempio

Considera l'esempio seguente di utilizzo di funzione shuffle() in C++. In questo programma, abbiamo creato il vettore una cosa con i valori interi da 0 a 10. Quindi generiamo un generatore di numeri casuali, che viene quindi passato insieme all'intervallo del vettore al mescola() funzione. IL mescola() la funzione prende il numero e scambia gli elementi in base a questo numero. Quindi abbiamo stampato la sequenza vettoriale riorganizzata usando il ciclo for





#include

#include

#include

#include

#include

utilizzando lo spazio dei nomi std ;

int principale ( )

{

vettore < int > una cosa { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

non firmato seme = crono :: Orologio di sistema :: Ora ( ) . time_since_epoch ( ) . contare ( ) ;

mescolare ( una cosa. inizio ( ) , una cosa. FINE ( ) , default_random_engine ( seme ) ) ;

cout << 'gli elementi mescolati sono:' ;

per ( int & io : una cosa )

cout << ' ' << io ;

cout << finel ;

ritorno 0 ;

}

random_shuffle() in C++

IL random_shuffle() La funzione riorganizza anche in modo casuale gli elementi nell'intervallo dato con un numero scelto a caso. Utilizza un generatore di numeri casuali per generare una sequenza di numeri casuali e quindi utilizza quei numeri per mescolare gli elementi nell'intervallo, quindi la sequenza del programma sarà diversa ogni volta che esegui il programma.



Sono richiesti due parametri per random_shuffle() : la posizione iniziale dell'intervallo è il primo parametro e il secondo parametro è la posizione finale. Inoltre, random_shuffle() può prendere un terzo parametro facoltativo, che è un oggetto funzione che può essere utilizzato per generare i numeri casuali per mescolare gli elementi.

Esempio

L'esempio seguente illustra il funzionamento di random_shuffle() in C++. In questo codice, abbiamo creato un file cosa vettoriale con valori interi da 1 a 10 e quindi utilizzato il per ciclo per stampare la sequenza mescolata in modo casuale:

#include

#include

utilizzando lo spazio dei nomi std ;

int principale ( )

{

vettore < int > una cosa { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 } ;

rand ( statico_cast < non firmato int > ( tempo ( nullptr ) ) ) ;

random_shuffle ( una cosa. inizio ( ) , una cosa. FINE ( ) ) ;

per ( int io : una cosa ) {

cout << io << ' ' ;

}

cout << ' \N ' ;



ritorno 0 ;

}

Differenza tra shuffle() e random_shuffle()

Ecco le principali differenze tra mescola() E random_shuffle() funzioni in C++.

1: random_shuffle() accetta una coppia di iteratori che rappresentano l'intervallo di elementi da mescolare, mentre mescola() accetta una coppia di iteratori che rappresentano l'intervallo di elementi da mescolare, oltre a un generatore di numeri casuali da utilizzare per lo shuffling.

2: random_shuffle() è generalmente meno efficiente di mescola() , in quanto deve generare una sequenza di numeri casuali da utilizzare per lo shuffling.

3: random_shuffle() utilizza l'implementazione interna del generatore di numeri casuali della libreria standard C++ per mescolare gli elementi, mentre mescola() ti consente di specificare il tuo generatore di numeri casuali da utilizzare per il rimescolamento, offrendoti un maggiore controllo sulla casualità del rimescolamento.

4: random_shuffle() è stato introdotto in C++98 ed è supportato da tutte le versioni della libreria standard C++, mentre mescola() è stato introdotto in C++11 ed è supportato solo dai compilatori che implementano tale versione dello standard.

Pensieri finali

La scelta tra mescola() E random_shuffle() dipende dal caso d'uso specifico e dai requisiti. Se hai bisogno di un maggiore controllo sulla casualità del mescolamento o se desideri utilizzare un generatore di numeri casuali personalizzato, allora mescola() sarebbe una scelta migliore. D'altra parte, se non hai bisogno di quel livello di controllo e desideri solo un modo semplice per mescolare gli elementi, allora random_shuffle() potrebbe essere sufficiente.