Benutzer:Havaniceday/Zufallszahlen
Wikipedia ist ein Wiki, sei mutig!
Ab C++ 11 wurde mit dem Header <random> die STL um Werkzeuge zum Generieren von Zufallszahlen erweitert. Die Werkzeuge zur Generierung bestehen eigentlich im Wesentlichen aus nur drei Teilen:
std::random_device
std::default_random_engine
std::uniform_int_distribution<>
Das std::random_device
generiert unsigned int
-Zufallszahlen, die vom System in einem Pool zur Verfügung gestellt werden. Wenn viele Zufallszahlen erzeugt werden müssen, kann es sein, das das System nicht mehr mit der Generierung hinterher kommt, dann wir die Programmausführung verlagsamt. Abhilfe schaffen die Random-Engines. Sie generieren fortlaufend pseudo-zufällige Zahlen. Mit ihnen kann man sehr schnell sehr viele Zufallszahlen erzeugen. Und dann gibt es noch das Interface zur Verteilung (distribution) der Zufallszahlen. Mit std::uniform_int_distribution
werden alle Zahlen gleich häufig generiert.
Hier einige Beispiele:
#include <random>
int wuerfel()
{
static std::random_device rd; // returns uniformly distributed unsigned ints
static std::uniform_int_distribution<> d(1, 6); // uniformly ditributed in range [1,6]
return d(rd);
}
#include <random>
int wuerfel()
{
// sets the seed to the engine from an unsigned int of the random_device
static std::default_random_engine e( std::random_device{}() );
static std::uniform_int_distribution d(1, 6);
return d(e);
}
#include <random>
#include <algorithm>
template <typename Itr>
void shuffle_container( Itr begin, Itr end )
{
static std::default_random_engine e( std::random_device{}() );
std::shuffle( begin, end, e);
}