результатом беседы Стефана Т. Lavavej (см here), я с помощью генератора случайных чисел Мерсенна Twister и я продуцирующие случайных чисел с такого рода кодомТипы генераторов случайных чисел и функций, которые принимают их в качестве аргументов
#include <iostream>
#include <random>
int main()
{
std::mt19937 mt(132);
std::uniform_int_distribution<int> dist(0,50);
for (int i =0;i<10;i++)
{
std::cout << dist(mt) << std::endl;
}
}
Я хотел бы перетасовать, используя функцию shuffle
(а не функцию random_shuffle
) (как рекомендовано в разговоре снова). От cppreference.com, я вижу, что функция принимает URBG&&
в качестве аргумента.
Я действительно не понимаю, что такое URBG
. Я попытался подать mt19937
вместо этого, и, похоже, он работает нормально.
#include <iostream>
#include <random>
int main()
{
std::vector<int> v;
v.push_back(1);
v.push_back(2);
v.push_back(3);
v.push_back(4);
std::mt19937 mt(132);
std::shuffle(v.begin(),v.end(),mt);
for (int i=0;i<v.size();i++)
{
std::cout << v[i] << std::endl;
}
}
Вопрос
- Что такое
URBG
? Подходит лиmt19937
подклассURBG
? - Могут ли все типы генераторов случайных чисел, заданные в качестве аргумента для любой функции, производить стохастический результат (например,
rand
,shuffle
или любую функцию отrandom.h
)?
Если вы посмотрите на ссылку, с которой вы ссылаетесь, вы увидите, что 'URBG' является аргументом шаблона. Тип - это все, что соответствует интерфейсу, например. класс 'std :: mt19937'. Дополнительную информацию см. В разделе «Требования к типу» ссылки. –