C ++与C#在重置后生成相同的随机数序列

问题描述 投票:-2回答:1

在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 ++中做这样的事情。如果有,有人可以帮助我吗?

c# c++ random
1个回答
0
投票

你可以通过调用random number generator(e.g. std::mt19937) obj.seed(value)播种cppref

在1~10之间创建10个ints:

#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() << " ";
}

onlinegdb

© www.soinside.com 2019 - 2024. All rights reserved.