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) | оператор присваивания удален (публичная функция-член) |
Генерация |
|
|
(C++11) | продвигает состояние движка и возвращает сгенерированное значение (публичная функция-член) |
Характеристики |
|
|
(C++11) | получает оценку энтропии для генератора не-детерминированных случайных чисел (публичная функция-член) |
|
[статический] (C++11) | получает наименьшее возможное значение в диапазоне вывода (публичная статическая функция-член) |
|
[статический] (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