关于C ++中rand()函数的困惑

时间:2014-07-13 11:08:17

标签: c++ function

我发现了以下案件的不同产出 案例1

....
rand();
cout<<a[rand()%4];
....

案例2

....
//rand();
cout<<a[rand()%4];
......

没有srand()答案应该是相同的,但它会变得不同。

2 个答案:

答案 0 :(得分:2)

来自http://en.cppreference.com/w/cpp/numeric/random/rand

std :: srand()播种rand()使用的伪随机数生成器。如果在对srand()的任何调用之前使用rand(),则rand()的行为就像是用srand(1)播种一样。 每次使用srand()播种rand()时,它必须在连续调用时生成相同的值序列。标准库中的其他函数可以调用rand,它是实现定义的函数。 它是实现定义的rand()是否是线程安全的。

这意味着rand()在srand中使用相同的种子生成相同的数字序列。我认为是这种情况,但是一次调用rand()会使用seed = 1播种它,然后在后续调用中不将种子设置为1。因此它会产生不同的结果。验证这一点的方法是再次使用1显式播种。

答案 1 :(得分:1)

每次拨打rand都会给你一个新的伪随机数。调用srand只会更改您将获得的伪随机数字序列。