Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/157.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ boost/random/uniform_int.hpp和boost/random/uniform_int.hpp能否互换使用?_C++_Boost_Random - Fatal编程技术网

C++ boost/random/uniform_int.hpp和boost/random/uniform_int.hpp能否互换使用?

C++ boost/random/uniform_int.hpp和boost/random/uniform_int.hpp能否互换使用?,c++,boost,random,C++,Boost,Random,boost中有两个随机整数生成器,boost::uniform_int和boost::random::uniform_int_distribution,后者仅在boost 1.47之后添加 我想知道它们的性能是否有任何差异(即它们生成的随机数的质量) 此外,使用boost::uniform\u int时,您需要通过variate\u generate将其与随机引擎耦合,但似乎可以使用 boost::random::mt19937 rng; boost::random::uniform_int_d

boost中有两个随机整数生成器,
boost::uniform_int
boost::random::uniform_int_distribution
,后者仅在boost 1.47之后添加

我想知道它们的性能是否有任何差异(即它们生成的随机数的质量)

此外,使用
boost::uniform\u int
时,您需要通过
variate\u generate
将其与随机引擎耦合,但似乎可以使用

boost::random::mt19937 rng;
boost::random::uniform_int_distribution<> six(1,6);
int x = six(rng);
boost::random::mt19937 rng;
boost::random::均匀分布6(1,6);
int x=六(rng);
不生成变量

这两种用法可以互换使用吗?

boost::uniform\u int
继承自
boost::random::uniform\u int\u distribution
,如果您查看for
uniform\u int
,您可以看到它基本上只调用基类函数

由于
uniform\u int
只调用
uniform\u int\u distribution
的函数,因此生成的数字没有差别。然而,Boost确实明确指出,
uniform\u int
已被弃用,所有新代码都应使用
uniform\u int\u distribution

要回答第二个问题,无论是
uniform_int
还是
uniform_int_distribution
都不需要
boost::random::variate_generator
variate_生成器
只是将随机数生成器(如
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;
}
#包括
#包括
#包括
#包括
#包括
int main()
{
boost::mt19937随机发生器(std::time(NULL));
boost::random::uniform_int_分布int_分布(0100);
//需要通过发电机吗
标准::cout