c++ - 现实程序中来自 c++ <random> 库的随机数生成器

标签 c++ c++11 random

我正在了解这个库,它在很多方面改进了旧的 rand 和 srand。但是对于 rand,很明显只有一个随机数生成器在使用 rand 时被调用和更新,无论它在您的程序中的何处。使用新方法时,我不确定如何以良好的风格有效地模仿这种行为。例如,如果我想要掷骰子,并且模仿在主过程中编写的在线示例,我用这样的方法编写了一个对象:

class foo{
    public:
    float getDiceRoll(){
        std::random_device rd;
        std::default_random_engine e1(rd());
        std::uniform_int_distribution<int> uniform_dist(1, 6);
        return uniform_dist(e1);
   }
}

这看起来很糟糕,因为每次你想掷骰子时都会重新创建引擎。这有点人为的情况,但在大型程序中,您将不得不将随机数生成器的声明放在某处。作为第一次尝试使用,我只希望所有随机数都有一个生成器,就像过去一样。实现这一目标的最佳方法是什么?网上很容易获得的例子都是直接写到主程序中的,所以他们没有回答这个基本问题。 我想不出有什么不像用大锤敲碎坚果那样的。任何帮助都会很棒。

最佳答案

对于像这样的微不足道的情况,我会将它们全部设置为 static 而不必担心太多。并且肯定会返回一个 int!

int getDiceRoll() {
    static std::random_device rd;
    static std::default_random_engine gen(rd());
    static std::uniform_int_distribution<int> dis(1, 6);

    return dis(gen);
}

关于c++ - 现实程序中来自 c++ <random> 库的随机数生成器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33420781/

相关文章:

c++ - 如何显示opengl的结果?

c++ - 将 float 转换为字符串

c++ - 字符串的 decltype 和 const 引用返回类型

c++ - C++11 中的 union : default constructor seems to be deleted

c++ - 从 C++ 容器中移除对象而不删除它们

c++ - C++11放弃auto_ptr的原因是什么?

java - 随机排序不会终止

python - 根据第三个列表中的随机项目,从两个列表之一中选择一个随机项目

html - 为 HTML 生成随机数

c++ - 为什么 copy_to_user 会花费数百毫秒?