std::random_device
Von cppreference.com
| Definiert in Header <random> |
||
| Klasse random_device; |
(seit C++11) | |
std::random_device ist eine gleichverteilte ganzzahlige Zufallszahlengenerator, der nicht-deterministische Zufallszahlen erzeugt.
std::random_device kann implementierungsdefiniert in Bezug auf eine pseudozufällige Engine implementiert werden, wenn keine nicht-deterministische Quelle (z.B. ein Hardwaregerät) für die Implementierung verfügbar ist. In diesem Fall kann jedes std::random_device-Objekt dieselbe Zahlenfolge erzeugen.
Inhalt |
[bearbeiten] Member-Typen
| Mitgliedertyp | Definition |
result_type (C++11) |
unsigned int |
[bearbeiten] Member-Funktionen
Konstruktion | |
| konstruiert die Engine (public member function) [[Bearbeiten]] | |
| operator= (gelöscht) (C++11) |
Der Zuweisungsoperator ist gelöscht (öffentliche Memberfunktion) |
Generierung | |
| verschiebt den Zustand der Engine und gibt den generierten Wert zurück (public member function) [[Bearbeiten]] | |
Eigenschaften des Generators | |
| (C++11) |
Ruft die Entropieschätzung für den nicht-deterministischen Zufallszahlengenerator ab (public member function) |
| [static] |
liefert den kleinstmöglichen Wert im Ausgabebereich (public static member function) [[Bearbeiten]] |
| [static] |
liefert den größtmöglichen Wert im Ausgabebereich (public static member function) [[Bearbeiten]] |
[bearbeiten] Hinweise
Eine bemerkenswerte Implementierung, bei der std::random_device in älteren Versionen von MinGW-w64 deterministisch ist (Bug 338, behoben seit GCC 9.2). Die neuesten MinGW-w64-Versionen können von GCC mit dem MCF-Thread-Modell heruntergeladen werden.
[bearbeiten] Beispiel
Führen Sie diesen Code aus
#include <iostream> #include <map> #include <random> #include <string> int main() { std::random_device rd; std::map<int, int> hist; std::uniform_int_distribution<int> dist(0, 9); for (int n = 0; n != 20000; ++n) ++hist[dist(rd)]; // note: demo only: the performance of many // implementations of random_device degrades sharply // once the entropy pool is exhausted. For practical use // random_device is generally only used to seed // a PRNG such as mt19937 for (auto [x, y] : hist) std::cout << x << " : " << std::string(y / 100, '*') << '\n'; }
Mögliche Ausgabe
0 : ******************** 1 : ******************* 2 : ******************** 3 : ******************** 4 : ******************** 5 : ******************* 6 : ******************** 7 : ******************** 8 : ******************* 9 : ********************