我需要此代码生成5到8之间的数字,然后将其分配给变量。然而,当我让它只给我一个数而不是多个时,它只给我相同的数字。当我将它设置为e倍数时,它会给我随机数字。
#include <random>
#include <iostream>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(5, 8);
for (int n=0; n<1; ++n)
std::cout << dis(gen) << ' ';
std::cout << '\n';
}
答案 0 :(得分:6)
1 - 您只有一个号码&#34; :
因为你的for循环只进行了一次迭代。
for (int n=0; n<1; ++n)
^
Here
2 - 如果你总是看到相同的伪随机序列,这是因为种子本身是伪随机的:对于std::random_device
,这是implementation specific:
注意,std :: random_device可以用a来实现 伪随机数引擎,如果是非确定性源(例如, 硬件设备)不适用于实现。
请注意,您在ideone上的示例不是伪随机的,并且工作正常:http://ideone.com/lysKrt
除rd
之外,您可以将系统时间用作种子:
#include <chrono>
// ...
unsigned seed = std::chrono::system_clock::now().time_since_epoch().count();
std::mt19937 gen(seed);
答案 1 :(得分:0)
这是因为可执行文件始终从同一个种子开始。如果你想在每次运行中使用不同的数字,那么你需要为生成器播种。用当前时间说。