gpt4 book ai didi

c++ - boost/random/uniform_int.hpp 和 boost/random/uniform_int_distribution.hpp 可以互换使用吗?

转载 作者:行者123 更新时间:2023-11-28 07:59:03 26 4
gpt4 key购买 nike

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

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

此外,还有 boost::uniform_int<>你需要通过 variate_generate 将它与随机引擎耦合, 但似乎在 boost's official website 上你可以使用

boost::random::mt19937 rng;
boost::random::uniform_int_distribution<> six(1,6);
int x = six(rng);

没有变量生成。

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

最佳答案

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() .将生成器与分布相关联不会更改原始生成器或分布对象。

如果有什么不清楚的地方请告诉我。

关于c++ - boost/random/uniform_int.hpp 和 boost/random/uniform_int_distribution.hpp 可以互换使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11983745/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com