Shuffle() vs random_shuffle() en C++

Shuffle Vs Random Shuffle En C



En C++, la bibliothèque standard fournit deux fonctions, mélanger() et random_shuffle() qui sont utilisés pour réorganiser les éléments d'un conteneur. Bien que les deux fonctions aient le même objectif, elles diffèrent dans leur implémentation et la manière dont elles génèrent des nombres aléatoires.

A partir de cet article, vous trouverez les différences entre ces deux fonctions et comprendrez leur fonctionnement.

shuffle() en C++

Le mélanger() La fonction est une fonction C++ intégrée utilisée pour mélanger ou réorganiser de manière aléatoire les éléments dans une plage donnée. La fonction est déclarée dans le fichier d'en-tête et a deux arguments : la position de départ de la plage est le premier argument et le deuxième argument représente la position de fin.







De plus, il prend également un troisième paramètre facultatif, qui est un objet fonction qui génère des nombres aléatoires à utiliser pour mélanger les éléments de la plage.



Quand le mélanger() est appelée, elle réorganise de manière aléatoire les éléments dans la plage spécifiée à l'aide du générateur de nombres aléatoires fourni. Le résultat du mélange n'est pas prévisible et chaque permutation possible des éléments est également susceptible de se produire.



Exemple

Considérez l'exemple ci-dessous d'utilisation de fonction shuffle() en C++. Dans ce programme, nous avons créé le vecteur une chose avec les valeurs entières de 0 à 10. Ensuite, nous générons un générateur de nombres aléatoires, qui est ensuite transmis avec la plage du vecteur au mélanger() fonction. Le mélanger() La fonction prend le nombre et échange les éléments en fonction de ce nombre. Ensuite, nous avons imprimé la séquence vectorielle réarrangée en utilisant la boucle for





#include

#include

#include

#include

#include

en utilisant l'espace de noms std ;

entier principal ( )

{

vecteur < entier > une chose { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , dix } ;

non signé graine = Chrono :: system_clock :: maintenant ( ) . temps_depuis_époque ( ) . compter ( ) ;

mélanger ( une chose. commencer ( ) , une chose. fin ( ) , default_random_engine ( graine ) ) ;

écoute << 'les éléments mélangés sont :' ;

pour ( entier & je : une chose )

écoute << ' ' << je ;

écoute << fin ;

retour 0 ;

}

random_shuffle() en C++

Le random_shuffle() La fonction réorganise également de manière aléatoire les éléments de la plage donnée avec un nombre choisi au hasard. Il utilise un générateur de nombres aléatoires pour générer une séquence de nombres aléatoires, puis utilise ces nombres pour mélanger les éléments de la plage, de sorte que la séquence du programme sera différente à chaque fois que vous exécuterez le programme.



Deux paramètres sont nécessaires pour random_shuffle() : la position de départ de la plage est le premier paramètre, et le deuxième paramètre est la position de fin. En outre, random_shuffle() peut prendre un troisième paramètre facultatif, qui est un objet fonction qui peut être utilisé pour générer les nombres aléatoires pour mélanger les éléments.

Exemple

L'exemple ci-dessous illustre le fonctionnement du random_shuffle() en C++. Dans ce code, nous avons créé un chose de vecteur avec des valeurs entières de 1 à 10, puis utilisé le pour la boucle pour imprimer la séquence aléatoirement mélangée :

#include

#include

en utilisant l'espace de noms std ;

entier principal ( )

{

vecteur < entier > une chose { 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , dix } ;

srand ( statique_cast < non signé entier > ( temps ( nullptr ) ) ) ;

random_shuffle ( une chose. commencer ( ) , une chose. fin ( ) ) ;

pour ( entier je : une chose ) {

écoute << je << ' ' ;

}

écoute << ' \n ' ;



retour 0 ;

}

Différence entre shuffle() et random_shuffle()

Voici les principales différences entre mélanger() et random_shuffle() fonctions en C++.

1: random_shuffle() prend une paire d'itérateurs représentant la gamme d'éléments à mélanger, tandis que mélanger() prend une paire d'itérateurs représentant la plage d'éléments à mélanger, ainsi qu'un générateur de nombres aléatoires à utiliser pour le mélange.

2 : random_shuffle() est généralement moins efficace que mélanger() , car il doit générer une séquence de nombres aléatoires à utiliser pour le brassage.

3 : random_shuffle() utilise l'implémentation interne de la bibliothèque standard C++ du générateur de nombres aléatoires pour mélanger les éléments, tandis que mélanger() vous permet de spécifier votre propre générateur de nombres aléatoires à utiliser pour le mélange, vous donnant plus de contrôle sur le caractère aléatoire du mélange.

4 : random_shuffle() a été introduit en C++98 et est pris en charge par toutes les versions de la bibliothèque standard C++, tandis que mélanger() a été introduit en C++11 et n'est pris en charge que par les compilateurs qui implémentent cette version de la norme.

Dernières pensées

Le choix entre mélanger() et random_shuffle() dépend de votre cas d'utilisation spécifique et de vos exigences. Si vous avez besoin de plus de contrôle sur le caractère aléatoire du mélange, ou si vous souhaitez utiliser un générateur de nombres aléatoires personnalisé, alors mélanger() serait un meilleur choix. D'un autre côté, si vous n'avez pas besoin de ce niveau de contrôle et que vous voulez juste un moyen simple de mélanger les éléments, alors random_shuffle() pourrait suffire.