Shuffle() vs random_shuffle() en C++

Shuffle Vs Random Shuffle En C



En C++, la biblioteca estàndard ofereix dues funcions, remenar () i random_shuffle() que s'utilitzen per reordenar els elements d'un contenidor. Tot i que ambdues funcions tenen el mateix propòsit, es diferencien en la seva implementació i en la forma en què generen nombres aleatoris.

A partir d'aquest article, trobareu les diferències entre aquestes dues funcions i entendreu com funcionen.

shuffle() en C++

El remenar () La funció és una funció C++ integrada que s'utilitza per barrejar o reordenar aleatòriament els elements d'un rang determinat. La funció es declara en el fitxer de capçalera i té dos arguments: la posició inicial de l'interval és el primer argument i el segon argument representa la posició final.







A més, també necessita un tercer paràmetre opcional, que és un objecte de funció que genera nombres aleatoris per utilitzar-los per barrejar els elements del rang.



Quan el remenar () s'anomena la funció, reordena aleatòriament els elements de l'interval especificat mitjançant el generador de números aleatoris proporcionat. El resultat de la barreja no és previsible, i cada possible permutació dels elements és igualment probable que es produeixi.



Exemple

Penseu en l'exemple següent d'ús del funció shuffle(). en C++. En aquest programa hem creat el vector una cosa amb els valors enters de 0 a 10. Aleshores generem un generador de nombres aleatoris, que després es passa juntament amb l'interval del vector al remenar () funció. El remenar () La funció pren el nombre i intercanvia els elements basats en aquest nombre. A continuació, vam imprimir la seqüència vectorial reordenada mitjançant el bucle for





#inclou

#inclou

#inclou

#inclou

#inclou

utilitzant l'espai de noms std ;

int principal ( )

{

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

sense signar llavor = crono :: rellotge_sistema :: ara ( ) . temps_des_de_època ( ) . comptar ( ) ;

remenar ( una cosa. començar ( ) , una cosa. final ( ) , motor_aleatori_predeterminat ( llavor ) ) ;

cout << 'els elements barrejats són:' ;

per ( int & i : una cosa )

cout << ' ' << i ;

cout << endl ;

tornar 0 ;

}

random_shuffle() en C++

El random_shuffle() La funció també reordena aleatòriament els elements de l'interval donat amb algun nombre escollit aleatòriament. Utilitza un generador de números aleatoris per generar una seqüència de números aleatoris i després utilitza aquests números per barrejar els elements del rang, de manera que la seqüència del programa serà diferent cada vegada que executeu el programa.



Es requereixen dos paràmetres random_shuffle() : la posició inicial de l'interval és el primer paràmetre i el segon paràmetre és la posició final. A més, random_shuffle() pot prendre un tercer paràmetre opcional, que és un objecte de funció que es pot utilitzar per generar números aleatoris per barrejar els elements.

Exemple

L'exemple següent il·lustra el funcionament del random_shuffle() en C++. En aquest codi, hem creat un cosa vectorial amb valors enters d'1 a 10 i després s'utilitza el per bucle per imprimir la seqüència barrejada aleatòriament:

#inclou

#inclou

utilitzant l'espai de noms std ;

int principal ( )

{

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

srand ( static_cast < sense signar int > ( temps ( nullptr ) ) ) ;

random_shuffle ( una cosa. començar ( ) , una cosa. final ( ) ) ;

per ( int i : una cosa ) {

cout << i << ' ' ;

}

cout << ' \n ' ;



tornar 0 ;

}

Diferència entre shuffle () i random_shuffle ()

Aquí hi ha les principals diferències entre remenar () i random_shuffle() funcions en C++.

1: random_shuffle() pren un parell d'iteradors que representen la gamma d'elements per barrejar, mentre remenar () pren un parell d'iteradors que representen el rang d'elements a barrejar, així com un generador de nombres aleatoris per utilitzar per barrejar.

2: random_shuffle() generalment és menys eficient que remenar () , ja que ha de generar una seqüència de números aleatoris per utilitzar-los per remenar.

3: random_shuffle() utilitza la implementació interna de la biblioteca estàndard de C++ del generador de números aleatoris per barrejar els elements, mentre que remenar () us permet especificar el vostre propi generador de números aleatoris per utilitzar-lo per remenar, donant-vos més control sobre l'aleatorietat de la barreja.

4: random_shuffle() es va introduir a C++98 i és compatible amb totes les versions de la biblioteca estàndard de C++, mentre que remenar () es va introduir en C++11 i només és compatible amb compiladors que implementen aquesta versió de l'estàndard.

Pensaments finals

L'elecció entre remenar () i random_shuffle() depèn del vostre cas d'ús i requisits específics. Si necessiteu més control sobre l'aleatorietat de la barreja, o si voleu utilitzar un generador de números aleatoris personalitzat, aleshores remenar () seria una millor opció. D'altra banda, si no necessiteu aquest nivell de control i només voleu una manera senzilla de barrejar elements, aleshores random_shuffle() podria ser suficient.