【发布时间】:2014-03-30 14:47:20
【问题描述】:
我知道最好只调用 srand() 一次(否则,如果使用相同的种子调用,您可能会得到相似的序列)。 现在,我正在实现一个将在其他代码中使用的类(可能不是我的),所以我无法访问 main()。
我想知道关于在类中使用 rand 是否有任何约定? 就像一些测试 srand 是否已经被调用的函数宏一样(如果没有,则将其调用到构造函数或其他东西中)。 还是我只是相信将要使用它的人在 main() 的开头调用 srand() ? 谢谢,
编辑@Malloc:
谢谢,如果我理解正确,我将不得不使用这种类型的初始化:
std::random_device r_device;
std::default_random_engine r_engine (r_device());
std::uniform_real_distribution<double> uniform_noise (a,b);
然后我可以调用实现:
uniform_noise(r_engine);
播种不是在当前时间完成的吗? 因此,我可以例如在构造函数中进行初始化并将引擎和分发作为私有成员?
【问题讨论】:
-
在没有 C++11 库的情况下,您可以使用 POSIX
drand48()集合中的一些函数来为不同的随机数序列提供不同的种子和状态,从而为您提供有机会在很大程度上将您的代码的随机数生成与其他任何人的代码隔离开来。
标签: c++ random conventions srand