mar*_*eng 0 c++ random mersenne-twister
我想生成一个随机向量,包括[min,max]范围内的n个元素,这对于mersenne twister和我的代码可以正常工作.
显然,每次调用我的rand_vec函数时,我都会得到相同的输出.但是每次调用它时我都需要随机函数来返回不同的结果.此外,整个过程需要播种,每次执行时输出必须相同.所以,在我的功能中播种twister std::random_device似乎不是一个选择.
此外,这个随机函数从我的程序的几个子程序调用:
#include <iostream>
#include <vector>
#include <random>
std::vector<int> rand_vec(int n, int min, int max, std::mt19937 mt){
std::vector<int> to_return(n);
std::uniform_int_distribution<> my_dist(min, max);
for(int i = 0; i < n; i++){
to_return[i] = my_dist(mt);
}
return(to_return);
}
int main()
{
std::vector<int> to_print(5);
std::mt19937 mt;
mt = std::mt19937(100);
to_print = rand_vec(5, 0, 10, mt);
for(int i = 0; i < 5; i++){
std::cout << to_print[i] << " ";
}
std::cout << "\n\n";
to_print = rand_vec(5, 0, 10, mt);
for(int i = 0; i < 5; i++){
std::cout << to_print[i] << " ";
}
std::cout << "\n\n";
}
Run Code Online (Sandbox Code Playgroud)
用/ EHsc/nologo/W4 main.cpp编译
编译成功!编译总时间:359 ms
1 0 10 8 3
1 0 10 8 3
总执行时间:562 ms
您需要通过引用传递随机数生成器
std::vector<int> rand_vec(int n, int min, int max, std::mt19937 mt)
Run Code Online (Sandbox Code Playgroud)
应该
std::vector<int> rand_vec(int n, int min, int max, std::mt19937 & mt)
Run Code Online (Sandbox Code Playgroud)
否则,您将重新使用相同的初始值mt,main()该初始值将从相同的点开始,为您提供相同的序列.
| 归档时间: |
|
| 查看次数: |
118 次 |
| 最近记录: |