随机生成器,种子不工作
Random Generator, seed not working
我想创建一个类,每当我调用它时都会返回一个随机数。但当我把它放入循环中时,它每次都会返回相同的随机数。我播种了一次,但它仍然一次又一次地返回同一个。只有当我关闭程序并再次打开它时,情况才会有所不同。任何帮助都将不胜感激。
**编辑
当我看不出我是怎么称呼它的时候。
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));
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- PRNG种子到底是什么,它在c ++中是如何工作的?
- 种子随机数生成器不工作
- 随机生成器,种子不工作