c++ - 如何创建具有随机数据成员值的对象? C++

标签 c++ random stl

下面代码生成的所有对象都具有相同的 randomNumber1 和 randomNumber2 值。如何正确使用 std::default_random_engine?

#include <random>
#include <iostream>

class Food{

    public:
        int randomNumber1;
        int randomNumber2;
        Food(){
            std::default_random_engine generator;
            std::uniform_int_distribution<int> distribution(1,40);
            std::uniform_int_distribution<int> distribution2(1,30);
            randomNumber1 = distribution(generator) * 20;
            randomNumber2 = distribution2(generator) * 20;
        };
};

int main(){

    Food * food = new Food();
    std::cout << food->randomNumber1 << " " << food->randomNumber2 << std::endl;
    Food * food1 = new Food();
    std::cout << food1->randomNumber1 << " " << food1->randomNumber2 << std::endl;
    Food * food2 = new Food();
    std::cout << food2->randomNumber1 << " " << food2->randomNumber2 << std::endl;

    return 0;
};

最佳答案

那是因为每次创建 Food 对象时,您都会重新为 engine 播种(使用相同的种子)。你可以做的是让它成为 static 所以它只播种一次:

static std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(1,40);
std::uniform_int_distribution<int> distribution2(1,30);
randomNumber1 = distribution(generator) * 20;
randomNumber2 = distribution2(generator) * 20;

或者..让调用者决定种子。

或者,正如@Unimportant 在评论中所说,使用 std::random_device:

static std::random_device dev;
static std::default_random_engine generator(dev());

关于c++ - 如何创建具有随机数据成员值的对象? C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43585371/

相关文章:

c++ - 如何在 msvc 预处理器中打印宏?

php - 从Mysql数据库表中随机取出50条记录(大数据集)

c++ - 什么需要特殊的异常类?

c# - 随机选择具有相同名称的 XML 节点

java - 如何生成与上次不同的颜色

c++ - C++ STL 中排序算法的工作

c++ - 如何从一个到另一个减去 std::map 元素并在 C++ 中更新它

c++ - 在应用程序中嵌入 C++ 编译器

c++ - 我想完善除特定类型之外的前向可变参数

c++ - 将 boost::array<> 打印到标准输出