boost::uniform_int<>
继承自boost::random::uniform_int_distribution<>
,如果你看header对于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()
。将生成器与分配关联不会更改原始生成器或分配对象。
请让我知道,如果有什么不清楚。