Il me semble que le moyen le plus court et le plus simple avec <random> du C++11 pour obtenir un nombre aléatoire dans un intervalle donné est le code suivant :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #include <random>
#include <time.h>
std::default_random_engine rd_engine(time(NULL));
int rand_(int min, int max)
{
std::uniform_int_distribution<> rd_dist(min, max);
return rd_dist(rd_engine);
}
int main()
{
int r = rand_(1, 6); // tirage équivalent à celui d'un dé 6
} |
Donc un peu lourdingue... :aie:
Ce qui est dommage avec la lib <random> du C++11 c'est qu'elle est clairement très puissante (on peut sans trop de difficulté sortir des distributions normales, binomiales etc), très customisable, mais il manque une fonction comme rand_ que j'ai définit plus haut et qui en une ligne de code couvrirait la vaste majorité des usages...
Du coup, je n'utilise quasi jamais <random> de C++11, mais le classique :
Code:
1 2 3 4 5
| srand(time(NULL)); // initialisation de rand
for(i=0; i<5; i++)
{
z = rand()%t;
} |
Bêtement un srand + rand/modulo est plus court à écrire et suffit largement pour quasiment tout :\