随机生成器,种子不工作

hat*_*ack 0 c++ random

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

**编辑

当我无法看到我每次都在调用它时.

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

这是不是只对种子进行一次实现,然后多次调用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();

}
Run Code Online (Sandbox Code Playgroud)

seh*_*ehe 5

你每次都播种它.

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

};
Run Code Online (Sandbox Code Playgroud)

请注意,uniform_*_distribution为单个调用创建实例实际上没有用.

更别说,把它包装成一个function<>.

你通常可以使用

auto mygen = bind(, );
Run Code Online (Sandbox Code Playgroud)

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

int this_is_random = mygen();
Run Code Online (Sandbox Code Playgroud)

在C++ 14中:

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

看见 Live On Coliru