C++ boost/random/uniform_int.hpp和boost/random/uniform_int.hpp能否互换使用?
boost中有两个随机整数生成器,C++ boost/random/uniform_int.hpp和boost/random/uniform_int.hpp能否互换使用?,c++,boost,random,C++,Boost,Random,boost中有两个随机整数生成器,boost::uniform_int和boost::random::uniform_int_distribution,后者仅在boost 1.47之后添加 我想知道它们的性能是否有任何差异(即它们生成的随机数的质量) 此外,使用boost::uniform\u int时,您需要通过variate\u generate将其与随机引擎耦合,但似乎可以使用 boost::random::mt19937 rng; boost::random::uniform_int_d
boost::uniform_int
和boost::random::uniform_int_distribution
,后者仅在boost 1.47之后添加
我想知道它们的性能是否有任何差异(即它们生成的随机数的质量)
此外,使用boost::uniform\u int
时,您需要通过variate\u generate
将其与随机引擎耦合,但似乎可以使用
boost::random::mt19937 rng;
boost::random::uniform_int_distribution<> six(1,6);
int x = six(rng);
boost::random::mt19937 rng;
boost::random::均匀分布6(1,6);
int x=六(rng);
不生成变量
这两种用法可以互换使用吗?boost::uniform\u int
继承自boost::random::uniform\u int\u distribution
,如果您查看foruniform\u int
,您可以看到它基本上只调用基类函数
由于uniform\u int
只调用uniform\u int\u distribution
的函数,因此生成的数字没有差别。然而,Boost确实明确指出,uniform\u int
已被弃用,所有新代码都应使用uniform\u int\u distribution
要回答第二个问题,无论是uniform_int
还是uniform_int_distribution
都不需要boost::random::variate_generator
。variate_生成器
只是将随机数生成器(如boost::random::mt19937
)与随机数分布(如uniform_int_distribution
)相关联,以方便使用。如果不使用variate_generator
,则每次希望生成随机数时都需要传递一个随机数生成器。下面是一个例子:
#include <boost/random/uniform_int.hpp>
#include <boost/random/mersenne_twister.hpp>
#include <boost/random/variate_generator.hpp>
#include <iostream>
#include <ctime>
int main()
{
boost::mt19937 rand_generator(std::time(NULL));
boost::random::uniform_int_distribution<> int_distribution(0, 100);
//Need to pass generator
std::cout << int_distribution(rand_generator) << std::endl;
//Associate generator with distribution
boost::random::variate_generator<boost::mt19937&,
boost::random::uniform_int_distribution<>
> int_variate_generator(rand_generator, int_distribution);
//No longer need to pass generator
std::cout << int_variate_generator() << std::endl;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
boost::mt19937随机发生器(std::time(NULL));
boost::random::uniform_int_分布int_分布(0100);
//需要通过发电机吗
标准::cout