我想在main函数之外生成随机数,但即使使用库并播种随机数生成器,输出也不是随机的.任何帮助表示赞赏.
#include <iostream>
#include <random>
#include <time.h>
int foo(std::mt19937 rng)
{
std::uniform_int_distribution<int> distr(0, 9);
return distr(rng);
}
int main()
{
std::random_device rd;
std::mt19937 rng(rd());
for (int j=0; j<10; j++)
{
std::cout << foo(rng) << " ";
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
随着输出
5 5 5 5 5 5 5 5 5 5
Run Code Online (Sandbox Code Playgroud)
小智 7
int foo(std::mt19937 rng)
Run Code Online (Sandbox Code Playgroud)
您是按值传递std :: mt19937生成器,因此当您将生成器传递给函数时,它不会从main中获取数字,因此创建该生成器的副本,该副本仅在该函数内部进行修改,并不影响主要的那个.
您应该通过引用传递它,因此它会修改main中的那个,并且在每次调用中,生成器将创建不同的数字:
int foo(std::mt19937& rng)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |