簡體   English   中英

C++ 與 C# 在重置后生成相同的隨機數序列

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM