/**
* Sergey Kopeliovich (burunduk30@gmail.com)
*/
#include <random> // Всё полезное в нашем примере берётся именно отсюда.
#include <iostream>
#include <chrono>
using namespace std;
// Рандому можно указывать сид (начальное значение).
mt19937 rng(239);
// В качестве начального значение можно использовать время (чтобы при каждом запуске получать новые случайные числа).
// Никогда не делайте так при тестировании нетривиального кода.
mt19937 rng2(chrono::steady_clock::now().time_since_epoch().count());
// 64-битные числа.
mt19937_64 rng3(239);
int main(){
cout << rng() << '\n'; // случайное 32-битное число, [0,2^{32})
int a = 5, b = 7;
// Кустарный способ получить целое число от a до b:
cout << a + rng() % (b - a + 1) << '\n';
// Способ из коробки получить целое число от a до b:
uniform_int_distribution<> gen_int(a, b);
cout << gen_int(rng) << '\n';
// Кустарный способ получить вещественное число от a до b:
cout << a + (double)rng() / mt19937::max() * (b - a) << '\n';
// Способ из коробки получить вещественное число от a до b:
uniform_real_distribution<> gen_real(a, b);
cout << gen_real(rng) << '\n';
vector<int> v{1, 2, 3};
int a[] = {1, 2, 3};
// random_shuffle использует rand() и удалён в C++17
// Правильный способ перемешивать массив/вектор:
shuffle(begin(v), end(v), rng);
shuffle(begin(a), end(a), rng);
for(int x: v)
cout << x << ' ';
cout << endl;
// Для любителей всё делать в одну строку:
shuffle(begin(a), end(), mt19937());
// random_shuffle, rand : DEPRECATED
// Пожалуйста, не пользуйтесь устаревшим функционалом.
}
|