Поделиться через


Класс random_device

Формирует случайную последовательность с помощью внешнего устройства.

class random_device { public:     typedef unsigned int result_type;     // cosntructor     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; };

Члены

random_device::random_device

random_device::entropy

random_device::operator()

Заметки

Этот класс описывает источник случайных чисел и, согласно стандарту ISO C++, может быть недетерминистическим или криптостойким (но это необязательно). В реализации в Visual Studio полученные значения являются недетерминистическими и криптостойкими, но производительность ниже, чем у генераторов, созданных на основе механизмов и адаптеров механизмов (таких как mersenne_twister_engine, самого быстрого и качественного механизма для большинства приложений).

Результаты random_device равномерно распределены в замкнутом диапазоне [0, 232).

Не гарантируется, что random_device приведет к неблокирующему вызову.

В целом, random_device используется для получения начальных значений для других генераторов, созданных с помощью механизмов или адаптеров механизмов. Для получения дополнительной информации см. <random>.

Пример

В следующем коде показаны основные функции класса и результаты его применения. Из-за недетерминистической природы random_device, случайные значения, показанные в разделе Выходные данные, не будут совпадать с вашими результатами. Подобный результат является нормальным и ожидаемым.

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

Результат

  

Этот пример упрощен и не представляет собой общего примера применения этого генератора. Более полный пример содержится в разделе <random>.

Требования

Заголовок: <random>

Пространство имен: std

См. также

Ссылки

<random>