std::random_device (3) - Linux Manuals

std::random_device: std::random_device


std::random_device - std::random_device


Defined in header <random>
class random_device; (since C++11)

std::random_device is a uniformly-distributed integer random number generator that produces non-deterministic random numbers.
std::random_device may be implemented in terms of an implementation-defined pseudo-random number engine if a non-deterministic source (e.g. a hardware device) is not available to the implementation. In this case each std::random_device object may generate the same number sequence.

Member types

Member type Definition
result_type unsigned int

Member functions


              constructs the engine
constructor (public member function)

operator= the assignment operator is deleted
              (public member function)


              advances the engine's state and returns the generated value
operator() (public member function)


              obtains the entropy estimate for the non-deterministic random number generator
entropy (public member function)

min gets the smallest possible value in the output range
              (public static member function)

max gets the largest possible value in the output range
              (public static member function)


A notable implementation where std::random_device is deterministic is MinGW (bug_338), although replacement implementations exist, such as mingw-std-random_device.


// Run this code

  #include <iostream>
  #include <string>
  #include <map>
  #include <random>

  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 p : hist) {
          std::cout << p.first << " : " << std::string(p.second/100, '*') << '\n';

Possible output:

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