Freigeben über


random_device-Klasse

Generiert eine zufällige Sequenz von einem externen Gerät.

Syntax

class random_device {
public:
   typedef unsigned int result_type;

   // constructor
   explicit random_device(const std::string& token = "");

   // properties
   static result_type min();
   static result_type max();
   double entropy() const;

   // generate
   result_type operator()();

   // no-copy functions
   random_device(const random_device&) = delete;
   void operator=(const random_device&) = delete;
   };

Member

random_device
Entropie
random_device::operator()

Hinweise

Die Klasse beschreibt eine Quelle von Zufallszahlen und darf - aber muss nicht - nach dem ISO C++-Standard nicht-deterministisch oder kryptografisch sicher sein. In der Visual Studio-Implementierung sind die produzierten Werte nicht-deterministisch und kryptografisch sicher, aber sie läuft langsamer als aus Modulen und Moduladaptern erstellte Generatoren (wie mersenne_twister_engine, das hochwertige und schnelle Modul für die meisten Anwendungen).

random_device-Ergebnisse sind gleichförmig im geschlossenen Bereich [0, 232) verteilt.

Es ist nicht garantiert, dass random_device zu einem nicht blockierenden Aufruf führt.

Im Allgemeinen wird random_device verwendet, um andere mithilfe von Engines oder Engine-Adaptern erstellte Generatoren mit Startwerten auszustatten. Weitere Informationen finden Sie unter <"zufällig>".

Beispiel

Mit dem folgenden Code werden die grundlegende Funktion dieser Klasse und Beispielergebnisse veranschaulicht. Aufgrund der nicht-deterministischen Struktur von random_device entsprechen die im Abschnitt Output gezeigten Zufallswerte nicht Ihren Ergebnissen. Dies ist normal und zu erwarten.

// random_device_engine.cpp
// cl.exe /W4 /nologo /EHsc /MTd
#include <random>
#include <iostream>
using namespace std;

int main()
{
    random_device gen;

    cout << "entropy == " << gen.entropy() << endl;
    cout << "min == " << gen.min() << endl;
    cout << "max == " << gen.max() << endl;

    cout << "a random value == " << gen() << endl;
    cout << "a random value == " << gen() << endl;
    cout << "a random value == " << gen() << endl;
}
entropy == 32
min == 0
max == 4294967295
a random value == 2378414971
a random value == 3633694716
a random value == 213725214

Dieses Beispiel ist vereinfacht und nicht repräsentativ für den generellen Verwendungsfall dieses Generators. Ein repräsentativeres Codebeispiel finden Sie unter <"zufällig>".

Anforderungen

Header:<random>

Namespace: std

random_device::random_device

Konstruiert den Generator.

random_device(const std::string& = "");

Hinweise

Der Konstruktor initiiert bei Bedarf den Generator und ignoriert dabei den Zeichenfolgenparameter. Löst einen Wert eines durch die Implementierung definierten Typen aus, der aus Ausnahme abgeleitet wird, wenn random_device nicht initialisiert werden konnte.

random_device::entropy

Schätzt den Zufallscharakter der Quelle ab.

double entropy() const noexcept;

Hinweise

Die Memberfunktion gibt eine, wie in Bits gemessene, Schätzung des Zufallscharakters der Quelle zurück.

random_device::operator()

Gibt einen zufälligen Wert zurück.

result_type operator()();

Hinweise

Gibt Werte zurück, die im geschlossenen Intervall [min, max] gleichförmig verteilt sind, wie durch die Memberfunktionen min() und max() festgelegt. Löst einen Wert eines durch die Implementierung definierten Typs aus, der aus Auswahl abgeleitet wird, wenn keine Zufallszahl abgerufen werden konnte.

Siehe auch

<random>