我只是想知道在程序开始时只播种一次随机数生成器是否足够。我编写使用随机数的函数。我从不在函数中播种 rand() 生成器,而是在主条目上保留调用 srand() 。例如,我的程序可能如下所示:
void func1()
{
std::cout << "This is func1 " << std::rand() << std::endl;
}
void func2()
{
std::cout << "This is func2 " << std::rand() << std::endl;
}
int main()
{
std::srand(std::time(NULL));
func1();
func2();
return 0;
}
通过这样做,我可以轻松地从主条目中关闭播种。它在调试程序时很有用 - 每次我运行程序而不播种时结果都保持不变。有时,如果由于某个随机数而出现问题,如果要生成一组不同的随机数,它可能会消失,所以我更喜欢这种简单的机制来关闭播种。
但是,我注意到在 C++11 的新随机实用程序集中,随机数生成器必须在使用前进行实例化。(例如 default_random_engine)。并且每次生成器都必须单独播种。我想知道是否真的鼓励在需要新生成器时重新植入生成器。我知道我可以创建一个全局随机生成器并像以前一样只播种一次,但我根本不喜欢使用全局变量的想法。否则,如果我创建一个本地随机数生成器,我就会失去全局关闭种子以进行调试或任何目的的能力。
我很高兴学习 C++11 中的新功能,但有时它只是非常令人困惑。如果我对新的随机生成器有任何问题,谁能告诉我?或者 C++11 中的最佳实践是什么?