C Exemple de distribution INT uniforme
Utilisez STD :: Uniform_int_distribution pour générer des entiers aléatoires dans une plage spécifiée, vous devez d'abord créer un Rand Device Rd pour l'ensemencement; 2. Initialiser le Mersenne Twister Engine STD :: MT19937 Gen (RD ()); 3. Définissez l'objet de distribution STD :: Uniform_int_distribution
Voici un exemple clair et pratique de l'utilisation std::uniform_int_distribution
en C pour générer des entiers aléatoires dans une plage spécifique.

Exemple de base: générer des entiers aléatoires dans une gamme
#include <iostream> #include <Ampand> int main () { // Étape 1: Créez un appareil aléatoire pour voir le générateur std :: random_device rd; // Étape 2: Initialiser un générateur de nombres aléatoires (Mersenne Twister) STD :: MT19937 GEN (RD ()); // Étape 3: Définissez une distribution entière uniforme entre 1 et 10 std :: uniforme_int_distribution <nt> dist (1, 10); // générer et imprimer 5 nombres aléatoires pour (int i = 0; i <5; i) { int random_number = dist (gen); std :: cout << random_number << ''; } std :: cout << '\ n'; retour 0; }
Sortie (exemple):
7 2 9 1 5
Points clés à comprendre
? Pourquoi pas rand()
?
Utilisation de std::uniform_int_distribution
avec un moteur approprié comme std::mt19937
est bien meilleur que l'ancien rand()
parce que:

- Il évite le biais modulo (distribution inégale).
- Il vous donne un contrôle total sur la gamme.
- Il fait partie de la bibliothèque C
<random>
moderne conçue pour un aléatoire de haute qualité.
? Comment voir fonctionne
-
std::random_device rd;
essaie d'obtenir des nombres aléatoires non déterministes (par exemple, du matériel). -
std::mt19937 gen(rd());
graines le générateur. Si vous utilisez une graine fixe (commegen(42)
), vous obtiendrez la même séquence à chaque fois - utile pour les tests.
? Les objets de distribution sont réutilisables
Vous pouvez réutiliser la distribution avec les mêmes générateurs ou différents:
// Réutiliser la même distribution plusieurs fois pour (int i = 0; i <3; i) { std :: cout << dist (gen) << ''; // même dist, nouveau nombre à chaque fois }
Cas d'utilisation courante: simulant un rouleau de dés
std :: uniforme_int_distribution <nt> dés (1, 6); int roll = dés (gen); std :: cout << "Vous avez roulé un" << roll << '\ n';
Cela garantit que chaque nombre de 1 à 6 a une probabilité égale , contrairement à rand() % 6 1
, qui peut être biaisé selon RAND_MAX
.

Résumé
Pour utiliser std::uniform_int_distribution
:
- Utilisez un bon générateur (
std::mt19937
) vu avecstd::random_device
. - Définissez la distribution avec le Min et Max souhaités (inclus).
- Appelez la distribution avec le générateur pour obtenir des entiers aléatoires impartiaux.
Fondamentalement, ces trois lignes font le gros duvage:
std :: mt19937 gen (std :: random_device {} ()); std :: uniforme_int_distribution <nt> dist (1, 100); int r = dist (gen);
C'est tout - propre, rapide et fiable.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Stock Market GPT
Recherche d'investissement basée sur l'IA pour des décisions plus intelligentes

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

L'allocateur personnalisé peut être utilisé pour contrôler le comportement d'allocation de mémoire des conteneurs C. 1. Le journal de journalisation dans l'exemple implémente la journalisation de l'opération de mémoire en surchargeant l'allocation, la transmission, la construction et la détruire des méthodes; 2. L'allocateur doit définir des modèles Value_Type et Rebind pour répondre aux exigences de conversion du type de conteneur STL; 3. L'allocateur déclenche la sortie du journal pendant la construction et la copie, ce qui est pratique pour suivre le cycle de vie; 4. Les applications réelles incluent des pools de mémoire, de la mémoire partagée, des outils de débogage et des systèmes intégrés; 5. Depuis C 17, Construct and Destroy peut être traité par STD :: ALLOCATOR_TRAITS par défaut

Installac compiler likeg usingpackageManagersordevelopmentToolsDenpeningSontheos.2.writeac programme etVeitwitha.cpppextension.3.compilethetrogramusingg hello.cpp-ohelotogenerateanexecuable.4

Utilisez la fonction STD :: System () pour exécuter les commandes système, qui doivent inclure des fichiers d'en-tête et passer dans des commandes de chaîne de style C, telles que STD :: System ("LS-L"), et la valeur de retour est -1, ce qui signifie que le processeur de commande n'est pas disponible.

Créer une structure de répertoire de projet, y compris cMakelists.txt, src / et inclure /; 2. Écrivez CMakelists.txt, spécifiez la version CMake, le nom du projet, la norme C et ajouter des fichiers exécutables; 3. Utilisez mkdirbuild pour entrer dans le répertoire et exécuter cmake .. et cmake - build. pour la compilation; 4. Ajoutez plusieurs fichiers source via add_execuable et utilisez Target_include_Directories pour inclure le chemin du fichier d'en-tête; 5. Utilisez Find_package pour trouver des bibliothèques externes et lier avec Target_Link_Library; 6.

La pile de C est un adaptateur de conteneur dans STL. Il suit le principe du retour à l'abri et doit inclure des fichiers d'en-tête; Ajouter des éléments en poussant, POP supprime l'élément supérieur et accède au haut du haut de la pile. Avant l'opération, vérifiez s'il est vide, qui est souvent utilisé dans des scénarios tels que l'évaluation de l'expression et le retour de retour.

TheAutokeyWordletsThecompilerDeducevariaBeTypeSfrominitialisers, réduisant la surbosité et destiné à maîtriser.

Une classe abstraite est une classe contenant au moins une fonction virtuelle pure. Il ne peut pas être instancié et doit être hérité en tant que classe de base. La classe dérivée doit implémenter toutes ses fonctions virtuelles pures, sinon il sera toujours une classe abstraite. 1. Les fonctions virtuelles pures sont déclarées par le type de type de retour virtuel Nom () = 0; pour définir les spécifications de l'interface; 2. 3. Des destructeurs virtuels doivent être fournis pour les classes abstraites (telles que Virtual ~ Shape () = par défaut;) pour s'assurer que les objets de classe dérivés sont correctement libérés via des pointeurs de classe de base; 4. Une fois la classe dérivée héritée, les fonctions virtuelles pures doivent être réécrites, telles que le rectangle et le cercle pour implémenter la zone () pour calculer leurs zones respectives; 5

La réponse est de définir une classe qui contient les alias et les opérations de type nécessaire. Tout d'abord, définissez la valeur_type, référence, pointeur, différence_type et iterator_category, puis implémentez les opérations de déréférence, d'incrément et de comparaison. Enfin, fournissez des méthodes begin () et end () dans le conteneur pour renvoyer l'instance itérateur, ce qui le rend compatible avec les algorithmes STL et la plage pour les boucles.
