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::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()
最初の呼び出しはtoであるのに対し、2番目の呼び出しはtoであることに注意してくださいvariate_generator<> operator()
。ジェネレーターをディストリビューションに関連付けても、元のジェネレーターまたはディストリビューションオブジェクトは変更されません。
不明な点がありましたらお知らせください。