随机生成器,种子不工作

Random Generator, seed not working

本文关键字:种子 工作 随机      更新时间:2023-10-16

我想创建一个类,每当我调用它时都会返回一个随机数。但当我把它放入循环中时,它每次都会返回相同的随机数。我播种了一次,但它仍然一次又一次地返回同一个。只有当我关闭程序并再次打开它时,情况才会有所不同。任何帮助都将不胜感激。

**编辑

当我看不出我是怎么称呼它的时候。

  RadomGenerator rg = new...
for(int i =0; i<10; i++){
     rg.createRandomNumber(1,5);}

这不是只安装种子一次,然后多次调用方法createRandomNumber吗?

 RandomGenerator::RandomGenerator()
{
seed = time(0);
}
int RandomGenerator::createRandomNumber(int start, int end)
{
std::function<int()> randomNumber = std::bind(std::uniform_int_distribution<int>(start,end),
                                      mt19937(seed));
qDebug()<< "result" << randomNumber() ;
return randomNumber();
}

您每次都在播种它。

#include <random>
struct RandomGenerator {
    std::mt19937 _engine;
    std::uniform_int_distribution<int> _dist;
    RandomGenerator(int start, int end) 
        : _engine { std::random_device{} () },
          _dist(start, end)
    {
    }
    int createRandomNumber()
    {
        return _dist(_engine);
    }
};

请注意,为单个调用创建uniform_*_distribution的实例实际上也没有什么用处。

更不用说用function<>包装了。

你通常可以使用

auto mygen = bind(, );

而不是整个类,并使用它:

int this_is_random = mygen();

在C++14中:

auto mygen = [ _engine = mt19937{ random_device{}() }, _dist = uniform_int_distribution<>(12, 42) ]() mutable {
    return _dist(_engine);
};

查看Coliru

这不是只安装种子一次,然后多次调用方法createRandomNumber吗?

没有。在这一行中,您每次使用相同的seed:实例化一个mt19937

std::function<int()> randomNumber = std::bind(std::uniform_int_distribution<int>(start,end),
                                  mt19937(seed));