C++ 中的 srand()
函数用于为 rand()
函数使用的伪随机数生成器设置种子。它定义在 cstdlib 头文件中。
示例
#include<iostream>
#include<cstdlib>
using namespace std;
int main() {
// set seed to 10
srand(10);
// generate random number
int random = rand();
cout << random;
return 0;
}
// Output: 71
srand() 语法
srand()
的语法是
srand(unsigned int seed);
srand() 参数
srand()
函数接受以下参数
- seed - 一个
unsigned int
类型的种子值
srand() 返回值
srand()
函数不返回任何值。
srand() 原型
srand()
在 cstdlib 头文件中的原型是
void srand(unsigned int seed);
在这里,srand()
参数 seed 被 rand()
函数用作种子。
C++ srand() 的工作原理
srand()
函数设置 rand()
函数的种子。rand()
函数的默认种子是 **1**。
这意味着,如果在调用 rand()
之前没有调用 srand()
,rand()
函数将表现得好像它使用了 srand(1)
作为种子。
但是,如果在调用 rand() 之前调用了 srand()
函数,那么 rand()
函数将生成一个具有由 srand()
设置的种子的数字。
注意:“种子”是伪随机数序列的起始点。想了解更多信息,请访问 StackOverflow 上的此链接。
示例 1:C++ srand()
#include<iostream>
#include<cstdlib>
using namespace std;
int main() {
int random = rand();
// srand() has not been called), so seed = 1
cout << "Seed = 1, Random number = " << random << endl;
// set seed to 5
srand(5);
// generate random number
random = rand();
cout << "Seed = 5, Random number = " << random << endl;
return 0;
}
输出
Seed = 1, Random number = 41 Seed = 5, Random number = 54
srand() 标准实践
- 伪随机数生成器不应在每次生成新数字集时进行播种,即它应该 **仅在程序开始时** 播种一次,在任何调用
rand()
之前。 - 最好使用调用
time(0)
的结果作为种子。time()
函数返回自 **1970 年 1 月 1 日 00:00 小时 UTC** 以来的秒数(即当前 Unix 时间戳)。
因此,种子值会随着时间而变化。所以每次我们运行程序时,都会生成一组新的随机数。
示例 2:srand() 与 time()
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
int main() {
// set seed to time(0)
srand(time(0));
// generate random number
int random = rand();
// print seed and random number
cout << "Seed = " << time(0) << endl;
cout << "Random number = " << random;
return 0;
}
输出
Seed = 1629892833 Random number = 5202