我只是想知道是否足够在程序开始时只播放一次随机数发生器。我编写使用随机数的函数。我从来没有在函数内生成rand()生成器,而是在main条目中保留调用srand()。例如。我的程序可能看起来像:我应该多久使用一次C++?
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的最佳实践?
有一个全局种子函数,它返回当前时间或(在调试模式下)一个常量。 – 2013-03-03 06:44:51