Namespaces
Variants

std:: random_device

From cppreference.net
Definido en el encabezado <random>
class random_device ;
(desde C++11)

std::random_device es un generador de números aleatorios enteros distribuidos uniformemente que produce números aleatorios no deterministas.

std::random_device puede implementarse en términos de un motor de números pseudoaleatorios definido por la implementación si no hay disponible una fuente no determinista (por ejemplo, un dispositivo de hardware) para la implementación. En este caso, cada objeto std::random_device puede generar la misma secuencia de números.

Contenidos

Tipos de miembros

Tipo de miembro Definición
result_type (C++11) unsigned int

Funciones miembro

Construcción
construye el motor
(función miembro pública)
operator=
(deleted) (C++11)
el operador de asignación está eliminado
(función miembro pública)
Generación
avanza el estado del motor y devuelve el valor generado
(función miembro pública)
Características
(C++11)
obtiene la estimación de entropía para el generador de números aleatorios no determinista
(función miembro pública)
[static]
obtiene el valor más pequeño posible en el rango de salida
(función miembro estática pública)
[static]
obtiene el valor más grande posible en el rango de salida
(función miembro estática pública)

Notas

Una implementación notable donde std::random_device es determinista en versiones antiguas de MinGW-w64 ( bug 338 , corregido desde GCC 9.2). Las últimas versiones de MinGW-w64 pueden descargarse desde GCC con el modelo de hilos MCF .

Ejemplo

#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)]; // nota: solo para demostración: el rendimiento de muchas
                          // implementaciones de random_device se degrada rápidamente
                          // una vez que se agota el pool de entropía. Para uso práctico
                          // random_device generalmente solo se usa para inicializar
                          // un PRNG como mt19937
    for (auto [x, y] : hist)
        std::cout << x << " : " << std::string(y / 100, '*') << '\n';
}

Salida posible:

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