Getting random numbers in C++ was historically done by using functions from the C library. First we initialized the a global generator via a call to srand() then the values were generated via rand().
Unfortunately this generator was known for being a quite poor one.
<random>
This has been greatly improved in C++11. For the initialization, we now have std::random_device to access a hardware-based generator6, then there are many pseudo-random number generators, std::mt19937 being a quite popular one.
int main() { // The random device will get a random value from the system. It is // certainly the best random source we can have here. std::random_device seed; // This is a pseudo-random number generator, here initialized by // a value obtained from the random device. std::mt19937 generator(seed()); // Finally this distribution will project the random values in the // [1, 24] range with equiprobability for each value. std::uniform_int_distribution<int> range(1, 10); for (int i = 0; i != 1000; ++i) printf("%d\n", range(generator)); return 0; }
Unfortunately the generators available in the standard library are known to be both inefficient and not very good at randomness. As an alternative, we can check for a permuted congruential generator (PCG) [O’N14], at https://www.pcg-random.org/.
6If there is one, otherwise it would be software-based.