Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 随机生成器,种子不工作_C++_Random - Fatal编程技术网

C++ 随机生成器,种子不工作

C++ 随机生成器,种子不工作,c++,random,C++,Random,我想创建一个类,每当我调用它时,它都会返回一个随机数。但当我把它放入一个循环中时,它每次都返回相同的随机数。我播种了一次,但它仍然一次又一次地返回相同的种子。只有当我关闭程序并再次打开它时,情况才会有所不同。任何帮助都将不胜感激 **编辑 当我每次都看不出我是如何称呼它的时候 RadomGenerator rg = new... for(int i =0; i<10; i++){ rg.createRandomNumber(1,5);} RadomGenerator rg=

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

**编辑

当我每次都看不出我是如何称呼它的时候

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

对于(inti=0;i您每次都在播种它

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

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

int this_is_random = mygen();
在C++14中:

auto mygen = [ _engine = mt19937{ random_device{}() }, _dist = uniform_int_distribution<>(12, 42) ]() mutable {
    return _dist(_engine);
};
auto mygen=[\u engine=mt19937{random\u device{}()},\u dist=uniform\u int\u distribution(12,42)]()可变{
返回距离(引擎);
};

看到它吧,你每次都在播种

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

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

int this_is_random = mygen();
在C++14中:

auto mygen = [ _engine = mt19937{ random_device{}() }, _dist = uniform_int_distribution<>(12, 42) ]() mutable {
    return _dist(_engine);
};
auto mygen=[\u engine=mt19937{random\u device{}()},\u dist=uniform\u int\u distribution(12,42)]()可变{
返回距离(引擎);
};
查看它

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

}
否。在这一行中,您每次都使用相同的
种子来实例化一个
mt19937

std::function<int()> randomNumber = std::bind(std::uniform_int_distribution<int>(start,end),
                                  mt19937(seed));
std::function randomNumber=std::bind(std::uniform\u int\u分布(开始、结束),
mt19937(种子);
这不是只实例化种子一次,然后多次调用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();

}
否。在这一行中,您每次都使用相同的
种子来实例化一个
mt19937

std::function<int()> randomNumber = std::bind(std::uniform_int_distribution<int>(start,end),
                                  mt19937(seed));
std::function randomNumber=std::bind(std::uniform\u int\u分布(开始、结束),
mt19937(种子);

您每次都在对其进行种子设定。我确信有几十个重复。如果您使用每秒更改的种子,则每一秒都会获得不同的序列。您每次都在对其进行种子设定。我确信有几十个重复。如果您使用每秒更改的种子,则每一秒都会获得不同的序列d、 好消息:有人建议在c++17或TS中使用更直接的
rand()
替换。因此,我们甚至可以在那里获得Java质量的东西:)我正在尝试使用头文件在Qt中实现这一点,但是我不知道如何声明struct或者它如何影响构造函数?我已经在类中包含了这是一个struct,但是当我称它为RandomGenerator*ranGen=newrandomGenerator(1,3)时它仍然不起作用;把createRandomNumber放在for循环中,它仍然多次打印出相同的数字我一点也不奇怪,@hat_to_the_back。你为什么不看看你该怎么用这个?整个想法是保持/保持/相同的实例。首先,不需要使用<代码>新的<代码>(经验法则:在C++中不要使用<代码>新< /COD>。它不是java或c++)。接下来,每次创建
RandomGenerator
对象时,您(显然)都会再次对其进行种子设定。这与您在原始代码中犯的错误相同。请随意展示您使用的实际代码,或者自己比较:)好消息:有人建议在c++17或TS中使用更直接的
rand()
替换。因此,我们甚至可以在那里获得Java质量的东西:)我正在尝试使用头文件在Qt中实现这一点,但是我不知道如何声明struct或者它如何影响构造函数?我已经在类中包含了这是一个struct,但是当我称它为RandomGenerator*ranGen=newrandomGenerator(1,3)时它仍然不起作用;把createRandomNumber放在for循环中,它仍然多次打印出相同的数字我一点也不奇怪,@hat_to_the_back。你为什么不看看你该怎么用这个?整个想法是保持/保持/相同的实例。首先,不需要使用<代码>新的<代码>(经验法则:在C++中不要使用<代码>新< /COD>。它不是java或c++)。接下来,每次创建
RandomGenerator
对象时,您(显然)都会再次对其进行种子设定。这与您在原始代码中犯的错误相同。请随意显示您使用的实际代码,或者自己比较:)