Spec-Zone.ru › C++

std::random_device

Определено в заголовке <random>
class random_device;
(с C++11)

std::random_device — это генератор случайных целых чисел с равномерным распределением, который генерирует недетерминированные случайные числа.

std::random_device может быть реализован на основе предопределенного псевдослучайного генератора, если для реализации недоступен недетерминированный источник (например, аппаратное устройство). В этом случае каждый std::random_device объект может генерировать одну и ту же последовательность чисел.

Типы членов

Тип члена Определение
result_type (C++11) unsigned int

Члены-функции

Конструкторы
(конструктор)
(C++11)
конструирует движок
(публичная функция-член)
operator=
(удалено) (C++11)
оператор присваивания удален
(публичная функция-член)
Генерация
operator()
(C++11)
продвигает состояние движка и возвращает сгенерированное значение
(публичная функция-член)
Характеристики
entropy
(C++11)
получает оценку энтропии для генератора не-детерминированных случайных чисел
(публичная функция-член)
min
[статический] (C++11)
получает наименьшее возможное значение в диапазоне вывода
(публичная статическая функция-член)
max
[статический] (C++11)
получает наибольшее возможное значение в диапазоне вывода
(публичная статическая функция-член)

Примечания

Заметной реализацией, где std::random_device является детерминированной, являются старые версии MinGW-w64 (баг 338, исправлен начиная с GCC 9.2). Новейшие версии MinGW-w64 можно загрузить с GCC с моделью потоков MCF.

Пример

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

Возможный вывод:

0 : ********************
1 : *******************
2 : ********************
3 : ********************
4 : ********************
5 : *******************
6 : ********************
7 : ********************
8 : *******************
9 : ********************

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/numeric/random/random_device

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API