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;
}
请注意,第一个电话是 touniform_int_distribution<> operator()
而第二个电话是 to variate_generator<> operator()
。将生成器与分布相关联不会更改原始生成器或分布对象。
如果有任何不清楚的地方,请告诉我。