Vous recherchez une méthode pour générer uniformément des nombres aléatoires dans une plage spécifiée [min, max].
Défauts avec rand
Votre implémentation actuelle utilisant rand() et l'opérateur module peut ne pas garantir l'uniformité distribution, car son comportement dépend de RAND_MAX et de la gamme elle-même.
C 11 et Uniform Range Generation
En C 11, std::uniform_int_distribution propose une solution adaptée à ce besoin :
#include <random> std::uniform_int_distribution<int> distr(min, max); std::random_device rand_dev; std::mt19937 generator(rand_dev()); int random_number = distr(generator);
Fonctionnalités supplémentaires de
Le champ
Container Shuffling
Pour mélanger un conteneur, utilisez std::shuffle:
#include <random> #include <vector> std::vector<int> vec = {4, 8, 15, 16, 23, 42}; std::random_device random_dev; std::mt19937 generator(random_dev()); std::shuffle(vec.begin(), vec.end(), generator);
Boost.Random
Si l'utilisation d'un compilateur C 11 n'est pas réalisable, pensez à Boost.Random, qui présente une interface similaire à l'homologue du C11.
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!