Après le discours de Stephan T. Lavavej (voir here), j'utilise un générateur de nombres aléatoires Mersenne Twister et je produis des nombres aléatoires avec ce genre de codeTypes de générateurs de nombres aléatoires et les fonctions qui les prennent comme arguments
#include <iostream>
#include <random>
int main()
{
std::mt19937 mt(132);
std::uniform_int_distribution<int> dist(0,50);
for (int i =0;i<10;i++)
{
std::cout << dist(mt) << std::endl;
}
}
Je voudrais mélanger en utilisant la fonction shuffle
(et non la fonction random_shuffle
) (comme recommandé dans le discours à nouveau). De cppreference.com, je vois la fonction prend un URBG&&
comme argument. Je ne comprends pas vraiment ce qu'est un URBG
. J'ai essayé de nourrir le mt19937
à la place et cela semble fonctionner correctement.
#include <iostream>
#include <random>
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
std::mt19937 mt(132);
std::shuffle(v.begin(),v.end(),mt);
for (int i=0;i<v.size();i++)
{
std::cout << v[i] << std::endl;
}
}
Question
- Qu'est-ce qu'un
URBG
? Est-ce quemt19937
est une sous-classe deURBG
? - Est-ce que tous les types de générateurs de nombres aléatoires donnés en argument à une fonction peuvent produire un résultat stochastique (tel que
rand
,shuffle
ou toute autre fonction derandom.h
)?
Si vous regardez la référence que vous liez à nouveau, alors vous verrez que 'URBG' est un argument de modèle. Le type est tout ce qui correspond à l'interface de par ex. la classe 'std :: mt19937'. Voir la section "Exigences de type" de la référence liée pour plus d'informations. –