可以互换使用boost/random/uniform_int.hpp和boost/random/uniform_int_
Can boost/random/uniform_int.hpp and boost/random/uniform_int_distribution.hpp be used interchangeably?
升压中有两个随机整数生成器,boost::uniform_int<>
和boost::random::uniform_int_distribution<>
,后者仅在升压1.47之后添加。
我想知道它们的性能是否有任何差异(即它们生成的随机数的质量)?
另外,对于boost::uniform_int<>
,您需要通过variate_generate
将其与随机引擎耦合,但似乎在boost的官方网站上您可以使用
boost::random::mt19937 rng;
boost::random::uniform_int_distribution<> six(1,6);
int x = six(rng);
没有变量生成。
这两种用法可以互换使用吗?
boost::uniform_int<>
继承自boost::random::uniform_int_distribution<>
,如果你查看uniform_int<>
的标头,你可以看到它基本上只是调用基类函数。
由于uniform_int<>
只调用uniform_int_distribution<>
的函数,因此生成的数字没有区别。但是,Boost 确实明确声明uniform_int<>
已弃用,并且uniform_int_distribution<>
应该用于所有新代码。
要回答你的第二个问题,uniform_int<>
和uniform_int_distribution<>
都不需要boost::random::variate_generator<>
才能运行。为了方便起见,variate_generator<>
只是将随机数生成器(如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;
}
请注意,第一次调用是uniform_int_distribution<> operator()
,而第二次调用是variate_generator<> operator()
。将生成器与分布关联不会更改原始生成器或分布对象。
如果有任何不清楚的地方,请告诉我。
- 是否可以为boost::random::uniform_int_distribution<>设置确定性种子?
- Boost::random::discrete_distribution构建后如何更改权重
- 如何将随机(boost.random)库包装在类中
- 使用 Boost.Random 从种子生成多精度整数
- 可以互换使用boost/random/uniform_int.hpp和boost/random/uniform_int_
- 对 MinGW-w64 gcc 上的 boost::random::random_device 构造函数和析构函数的未定
- boost::random::variate_generator-构造后更改参数
- 使用boost::random库获取整数随机值而不是实数
- 一种在每个不同的程序运行中更改 boost::random 种子的方法
- 使用 boost::random 洗牌向量时出现问题
- 如何使用double[];初始化boost::random::discrete_distribution;
- boost::random::discrete_distribution是否可动态调整大小
- 使用boost::random跨平台生成一致的随机数
- 是boost::random::uniform_real_distribution应该在处理器之间是相同的
- Boost random::discrete_distribution构建后如何更改权重
- Boost rng vs OpenCV rng vs c++11 std::random?
- 初始化VC2010中的boost::random::discrete_distribution
- 如何使用std::vector初始化boost::random::discrete_distribution
- 多线程RNG从Boost.Random
- Boost随机样本,如python random.sample