在c#中我编写了一个函数,它使用随机数生成器生成序列中的下一个随机数,我在构造函数中使用特殊值进行了种子生成:
public randomS(int number = DefaultValue) : base(number)
{
seed = p;
random = new Random((int) seed);
}
protected int GenerateNextSequence()
{
return random.Next(MIN_VALUE, MAX_VALUE);
}
然后,用户可以调用重置函数来重置此序列,其中我再次使用相同的值为随机数生成器播种,并且GenerateNextSequence将开始生成与重置之前生成的相同的数字:
public override void ResetSequence()
{
random = new Random((int) seed);
state = true;
}
我想在C ++中做类似的事情。不确定是否可以在C ++中做这样的事情。如果有,有人可以帮助我吗?
你可以通过调用random number generator(e.g. std::mt19937)
obj.seed(value)
播种cppref
在1~10之间创建10个int
s:
#include <iostream>
#include <random>
class myrandom
{
public:
int seed_;
int min_ = 0, max_ = 10;
std::mt19937 gen_; // random number generator
std::uniform_int_distribution<int> dist_ {min_, max_}; // random number distribution
// set a random seed if no argument provide
myrandom (int seed = std::random_device{}()) { seed_ = seed; gen_.seed(seed); }
int get() { return dist_(gen_); }
void reset () { gen_.seed(seed_); }
};
int main()
{
myrandom randobj;
for (int i=0; i<10; i++)
std::cout << randobj.get() << " ";
std::cout << "\n";
randobj.reset();
for (int i=0; i<10; i++)
std::cout << randobj.get() << " ";
}