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) unsignedint

Функции-члены

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

Примечания

Примечательный пример реализации, в которой 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/cpp/numeric/random/random_device

Spec-Zone.ru

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