下面代码生成的所有对象都具有相同的 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/