我想将随机数生成器状态保持为成员变量,因此从此类生成的每个对象都有其一个。有必要的是,每次生成对象时,种子也会发生变化。
我做了以下事情,即通过对象的构造函数更改种子。我用 time(NULL) 做的播种但这不够准确,因为对象的创建速度比一秒钟之内快,哈哈。
#include <iostream>
#include <cmath>
#include<random>
#include<chrono>
#include <ctime>
class Test{
public:
Test();
std::mt19937 rng;
double randomNumber(double min, double max);
};
Test::Test(){
rng.seed(time(NULL));
}
double Test::randomNumber(double min, double max){
std::uniform_real_distribution<double> uniformDistribution(min, max);
return uniformDistribution(rng);
}
int main(){
Test a;
Sleep(1000*1);
Test b;
for (int i = 0; i < 10; i++){
std::cout << "Random number a: " << a.randomNumber(0, 10) << "\tRandom number b: " << b.randomNumber(0, 10) << std::endl;
}
}
我正在努力使用 [ Seeding rand() for a C++ class by bames53 中描述的方法。
包括这件作品
std::mt19937 eng{ std::chrono::high_resolution_clock::now().time_since_epoch().count() };
进入类声明会产生以下错误:
错误:没有构造函数实例“std::merseen_twister_engine<_Ty,_Wx, many more things> 参数类型是 (std::chrono::system_clock::rep)
现在我不完全知道错误来自哪里以及如何解决我的问题。请记住,我或多或少是一个 c++ 新手。谢谢!