我目前遇到一个问题,即我的RNG总是给我相同的号码 - 即使我每次都在(据说)播种这个值。
该类中的代码是:
int RandomNumberGenerator()
{
std::mt19937 engine;
auto seed = std::chrono::high_resolution_clock::now().time_since_epoch().count();
engine.seed((unsigned long)seed);
std::uniform_int_distribution<int> distribution(0, 100);
return distribution(engine);
}
调用它的代码是:
vector<int> iv;
generate_n(back_inserter(iv), 5, RandomNumberGenerator);
cout << "\nVector content: ";
copy(iv.begin(), iv.end(), ostream_iterator<int>(cout, " "));
每次都是generate_n函数
答案 0 :(得分:2)
好吧,您创建了n
个不同的引擎,并使用时钟值为它们播种。有可能时钟在generate_n()
运行的时间内没有移动,并且所有引擎都以相同的值播种。
您应该为生成器播种一次并多次使用它。
的示例#include <algorithm>
#include <functional>
#include <iostream>
#include <iterator>
#include <random>
#include <vector>
int main()
{
std::random_device rd;
std::mt19937 gen(rd());
std::uniform_int_distribution<> dis(0, 100);
std::vector<int> vi;
std::generate_n(std::back_inserter(vi), 5, std::bind(dis, gen));
std::copy(begin(vi), end(vi), std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
}
你可以看到它live
注意的
Some people may say that your code was indeed returning random numbers:)