[英]C++ vs C# generating the same sequence of random numbers after a reset
在 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++ 中做這樣的事情。 如果有,有人可以幫助我嗎?
您可以通過調用obj.seed(value)
cppref來播種random number generator(eg std::mt19937)
要在 1~10 之間創建 10 個int
:
#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() << " ";
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.