小编Tyl*_*ter的帖子

我应该在我的C++标准随机分布上调用reset()来清除隐藏状态吗?

我想用C++ 11标准库中的随机数分布包含简单的函数,这些函数将分布的参数和生成器实例作为参数.例如:

double normal(double mean, double sd, std::mt19937_64& generator)
{
    static std::normal_distribution<double> dist;
    return dist(generator, std::normal_distribution<double>::param_type(mean, sd));
}
Run Code Online (Sandbox Code Playgroud)

我想避免分发对象中的任何隐藏状态,以便每个对此包装函数的调用仅取决于给定的参数.(可能每次调用此函数都可以使用不同的生成器实例.)理想情况下,我会使分发实例static const确保这一点; 但是,分布operator()不是const函数,所以这是不可能的.

我的问题是:为确保分发中没有隐藏状态,是否1)必要且2)足以reset()每次呼叫分配?例如:

double normal(double mean, double sd, std::mt19937_64& generator)
{
    static std::normal_distribution<double> dist;
    dist.reset();
    return dist(generator, std::normal_distribution<double>::param_type(mean, sd));
}
Run Code Online (Sandbox Code Playgroud)

(总的来说,我reset()对随机分布函数的目的感到困惑......我理解为什么生成器有时需要重置/重新设置,但为什么分配对象需要重置?)

c++ random standard-library c++11

10
推荐指数
1
解决办法
2113
查看次数

标签 统计

c++ ×1

c++11 ×1

random ×1

standard-library ×1