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