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.