函数
<cstdlib>

srand

void srand (unsigned int seed);
初始化随机数生成器
使用作为 seed 传递的参数来初始化伪随机数生成器。

对于每次调用 srand 时使用的不同 seed 值,可以预期伪随机数生成器在后续调用 rand 时会生成不同的结果序列。

使用相同 seed 的两次不同初始化,在后续调用 rand 时将生成相同的结果序列。

如果 seed 设置为 1,生成器将被重新初始化为其初始值,并产生与任何 randsrand 调用之前相同的值。

为了生成类似随机的数字,srand 通常被初始化为某个独特的运行时值,例如函数 time(在头文件 <ctime> 中声明)返回的值。这对于大多数简单的随机化需求来说已经足够独特。

参数

seed
一个整数值,用作伪随机数生成器算法的种子。

返回值



示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/* srand example */
#include <stdio.h>      /* printf, NULL */
#include <stdlib.h>     /* srand, rand */
#include <time.h>       /* time */

int main ()
{
  printf ("First number: %d\n", rand()%100);
  srand (time(NULL));
  printf ("Random number: %d\n", rand()%100);
  srand (1);
  printf ("Again the first number: %d\n", rand()%100);

  return 0;
}

可能的输出

First number: 41
Random number: 13
Again the first number: 41


数据竞争

该函数会访问和修改内部状态对象,这可能导致与并发调用 randsrand 发生数据竞争。

一些库提供了 rand 的替代函数,该函数明确避免了这种数据竞争:rand_r(不可移植)。

C++ 库实现可以保证调用此函数时不会发生数据竞争

异常 (C++)

无异常保证:此函数从不抛出异常。

另见