在C++中iostream里面封装的就有随机数函数rand()和srand(),它们的作用分别是产生随机数和产生随机数的种子。
函数原型分别如下:
void srand(unsigned);
int rand(void);
下面就直接根据代码分析:
#include <iostream> using namespace std; int main(int argc, const char * argv[]) { // insert code here... srand(time(NULL)); for (int i=0; i<100; i++) { cout<<rand()<<endl; } return 0; }
这个是伪随机产生的例子,给产生随机数的函数一个种子,当然种子为系统当前的时间戳,产生如下结果:
1660164204 124751157 748656227 558519416 384803675 1322104608 598851147 1782857787 651499518 1880766620 ..........
再运行一次
1707324646
328834108
1239429425
498970075
266408990
32490935
614298207
1556073920
878520274
1340171993
1462196615
1483135684
1218750259
836577927
......................
不用种子的话,会产生如下结果:
#include <iostream> using namespace std; int main(int argc, const char * argv[]) { // insert code here... // srand(time(NULL)); for (int i=0; i<100; i++) { cout<<rand()<<endl; } return 0; }
第一次结果:
16807
282475249
1622650073
984943658
1144108930
470211272
101027544
1457850878
1458777923
2007237709
823564440
......................
第二次结果:
16807
282475249
1622650073
984943658
1144108930
470211272
101027544
1457850878
1458777923
2007237709
823564440
1115438165
1784484492
74243042
......................
竟然是一样的,显然是错误的。
再试一种方式,将srand放在循环里 面
#include <iostream> using namespace std; int main(int argc, const char * argv[]) { // insert code here... for (int i=0; i<100; i++) { srand(time(NULL)); cout<<rand()<<endl; } return 0; }
第一次结果:
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
1713459201
......................
这真不是随机,猜测应该是循环执行的时间太快,每一次rand()函数都要接受一个种子来初始化本身,种子基本上是一样的,随机数的值是一样的。