📜  C++ srand()

📅  最后修改于: 2020-09-25 08:59:03             🧑  作者: Mango

C++中的srand() 函数播种了rand() 函数使用的伪随机数生成器。

C++中的srand() 函数播种了rand() 函数使用的伪随机数生成器。 rand() 函数的种子默认为1。

这意味着,如果在rand()之前未调用srand(),则rand() 函数的行为就好像它是由srand(1)植入的。

srand()原型

void srand(unsigned int seed);

srand() 函数采用无符号整数作为其参数,该参数由rand() 函数用作种子。

它在头文件中定义。

srand()参数

srand()返回值

srand() 函数不返回任何值。

示例1: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时间戳)。种子的值随时间变化。因此,每次我们运行该程序时,都会生成一组新的随机数。

示例2:带time()的srand() 函数

#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