【发布时间】:2017-02-25 16:30:01
【问题描述】:
在 Stephan T. Lavavej 的演讲之后(请参阅 here),我正在使用 Mersenne 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类。有关详细信息,请参阅链接参考的“类型要求”部分。
标签: c++ random generator random-seed stochastic