Большинство советов по "рандомайзеру" в C и C++ сводятся к использованию srand(time(NULL));
Используя этот метод можно добиться только того, что "рандомайзер" отрабатывает исключительно с интервалом в 1 секунду для каждого запуска. Это очень неудобно при запуске "рандомайзера" чаще раза в 1 секунду или при запуске нескольких потоков, которые используют один "рандомайзер".
Решение достаточно просто. Подключаем библиотеку <random>, используем функцию random_device, по желанию, приводим ее вывод к типу int и получаем действительно случайность:
# include <iostream>
# include <random>
main int (){
std::random_device rd;
i = srand(static_cast(rd()));
printf("rand: %i", i);
return 0;
}
Для компиляции кода, использующего библиотеку <random> используется ключ -std=c++11.