Правильный способ использования rand()
- сначала позвонить srand()
. srand()
сгенерирует серию случайных чисел, а rand()
просто перебирает их. Если вы не позвоните srand()
, вы будете получать один и тот же номер каждый раз, когда будете использовать 'rand () `.
srand
пример:
int main() {
// Call this function once to generate the random numbers using the seed `time(NULL)`
srand(time(NULL));
for (size_t i = 0; i < 10; i++) {
std::cout << rand() % 5 << std::endl; // Go through the random numbers series
}
return EXIT_SUCCESS;
}
Однако в В C ++ есть библиотека <random>
, которая облегчит вашу жизнь в задаче генерации случайных чисел (и будет работать действительно лучше, чем при использовании srand
& rand
).
// Function to generate random numbers between `min` and `max` params
size_t get_random(size_t min, size_t max) {
// the generator will only be seeded once since it's static (Equivalent to calling `srand` once)
static std::mt19937 gen(std::random_device{}());
std::uniform_int_distribution<size_t> dist(min, max);
return dist(gen); // generate random number
}
Кредит на идею функции: @ TedLyngmo .
Другие подробности: Все объекты, созданные с помощью конструктора, имеют одинаковые векторы