boost::uniform_int<>から継承しboost::random::uniform_int_distribution<>、のヘッダーをuniform_int<>見ると、基本的に基本クラス関数を呼び出すだけであることがわかります。
uniform_int<>の関数を呼び出すだけなのでuniform_int_distribution<>、生成される数に違いはありません。Boostは明示的に述べていますが、これuniform_int<>は非推奨であり、uniform_int_distribution<>すべての新しいコードに使用する必要があります。
2番目の質問に答えるには、機能する必要uniform_int<>もありません。便宜上、乱数ジェネレーター(のような)を乱数分布(のような)に関連付けるだけです。を使用しない場合は、乱数を生成するたびに乱数ジェネレーターを渡す必要があります。次に例を示します。uniform_int_distribution<>boost::random::variate_generator<>variate_generator<>boost::random::mt19937uniform_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()最初の呼び出しはtoであるのに対し、2番目の呼び出しはtoであることに注意してくださいvariate_generator<> operator()。ジェネレーターをディストリビューションに関連付けても、元のジェネレーターまたはディストリビューションオブジェクトは変更されません。
不明な点がありましたらお知らせください。