Udostępnij za pośrednictwem


random_device — Klasa

Generuje losową sekwencję z urządzenia zewnętrznego.

Składnia

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;
   };

Elementy członkowskie

random_device
entropia
random_device::operator()

Uwagi

Klasa opisuje źródło liczb losowych i jest dozwolona, ale nie jest wymagana do zabezpieczenia niedeterministycznego lub kryptograficznego przez standard ISO C++. W implementacji programu Visual Studio generowane wartości są niedeterministyczne i kryptograficznie bezpieczne, ale działa wolniej niż generatory utworzone na podstawie silników i adapterów silnika (takich jak mersenne_twister_engine, wysokiej jakości i szybki aparat wybrany dla większości aplikacji).

random_device wyniki są równomiernie rozłożone w zamkniętym zakresie [ 0, 232).

random_device Nie ma gwarancji, że wywołanie nie blokuje.

Ogólnie rzecz biorąc, random_device służy do inicjowania innych generatorów utworzonych z silnikami lub adapterami silnika. Aby uzyskać więcej informacji, zobacz losowe>.<

Przykład

Poniższy kod przedstawia podstawowe funkcje tej klasy i przykładowe wyniki. Ze względu na niedeterministyczny charakter random_devicemetody , losowe wartości wyświetlane w sekcji Dane wyjściowe nie będą zgodne z wynikami. Jest to normalne i oczekiwane.

// 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

Ten przykład jest uproszczony i nie jest reprezentatywny dla ogólnego przypadku użycia tego generatora. Aby zapoznać się z bardziej reprezentatywnym przykładem kodu, zobacz losowe>.<

Wymagania

Nagłówek:<losowy>

Przestrzeń nazw: std

random_device::random_device

Tworzy generator.

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

Uwagi

Konstruktor inicjuje generator zgodnie z potrzebami, ignorując parametr ciągu. Zgłasza wartość typu zdefiniowanego przez implementację pochodzącego z wyjątku , jeśli random_device nie można zainicjować obiektu .

random_device::entropy

Szacuje losowość źródła.

double entropy() const noexcept;

Uwagi

Funkcja składowa zwraca oszacowanie losowości źródła mierzonego w bitach.

random_device::operator()

Zwraca wartość losową.

result_type operator()();

Uwagi

Zwraca wartości równomiernie rozłożone w zamkniętym interwale [ min, max] zgodnie z funkcjami min() składowymi i max(). Zgłasza wartość typu zdefiniowanego przez implementację pochodzącego z wyjątku , jeśli nie można uzyskać liczby losowej.

Zobacz też

<losowy>