循环C++ srand() 函数
C++ srand() function in loop
我知道当在循环中调用srand()函数时,它会生成不同的随机数,因为srand()
在循环内并且循环可能在不到一秒的时间内完成,因此我们每次都有相同的数字。我的问题是:为什么当srand()
不在循环中时它会正常工作?如果循环在不到一秒内完成,则种子再次对所有数字都相同......但它每次都会改变。虽然种子似乎保持不变。 尝试以下代码:
int k = 5;
while (k--)
{
srand(time(0));
int num1 = rand() % 6;
cout << num1 << endl;
}
使用相同的种子,随机数生成器将产生完全相同的数字序列。
我们想要的是一个"随机"的种子,或者至少每次都不同,这样随机数的序列每次都不同。
srand()
函数使用系统时钟作为种子。正如评论中提到的,如果您在这一秒钟内多次拨打srand()
,然后得到一个随机数,那么您每次都会得到相同的"随机"号码。
循环之外调用srand()
没有什么不同,除了每次调用之间可能至少间隔一秒钟即可调用它。这意味着种子是不同的,生成的数字是不同的。
此外,正如另一条评论中提到的,通常只需要在程序开始时为随机数生成器播种一次。如果出于某种原因要多次生成相同的数字序列,则可能不希望执行此操作。
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- C++ 'srand()' 函数产生模式?
- 如何调用 ntoskrnl.exe srand 函数?
- SRAND 在类中的函数
- rand()在通过函数调用时生成相同的随机数集(即使在使用srand(time(NULL)进行种子设定之后)
- 为srand()提供Windows的时间函数
- 循环C++ srand() 函数
- 重载函数的调用在使用 srand(time(0)) 时是不明确的
- srand函数如何与时间函数相互作用
- 使用srand和时间函数的差异