📅  最后修改于: 2020-09-25 08:59:03             🧑  作者: Mango
C++中的srand() 函数播种了rand() 函数使用的伪随机数生成器。 rand() 函数的种子默认为1。
这意味着,如果在rand()之前未调用srand(),则rand() 函数的行为就好像它是由srand(1)植入的。
void srand(unsigned int seed);
srand() 函数采用无符号整数作为其参数,该参数由rand() 函数用作种子。
它在
srand() 函数不返回任何值。
#include
#include
using namespace std;
int main()
{
int random = rand();
/* No srand() calls before rand(), so seed = 1*/
cout << "Seed = 1, Random number = " << random << endl;
srand(5);
/* Seed = 5 */
random = rand();
cout << "Seed = 5, Random number = " << random << endl;
return 0;
}
运行该程序时,输出为:
Seed = 1, Random number = 41
Seed = 5, Random number = 54
优良作法是在程序开始时以及在调用rand()之前仅对伪随机数生成器进行一次播种。不应在每次需要生成新的数字集时将其作为种子。
标准做法是使用对time(0)的调用结果作为种子。 time() 函数返回自UTC 1970年1月1日00:00以来的秒数(即当前的unix时间戳)。种子的值随时间变化。因此,每次我们运行该程序时,都会生成一组新的随机数。
#include
#include
#include
using namespace std;
int main()
{
srand(time(0));
int random = rand();
cout << "Seed = " << time(0) << endl;
cout << "Random number = " << random << endl;
return 0;
}
运行该程序时,输出为:
Seed = 1485583981
Random number = 22589