ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++随机值相关函数

2021-10-24 12:03:39  阅读:223  来源: 互联网

标签:rand 函数 int C++ uniform 随机 随机数 distribution include


随机数指的是从一个可能的范围中挑选出一个值返回,每一个范围内的数字被选中的概率是一样的。C++中提供了一系列函数来实现随机数生成。

1. rand

rand函数每次都返回一个0~65536范围内的随机整数。这些随机数通过算法生成,并不是真正的随机数。

 1 #include <iostream>
 2 #include<cstdlib>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     for(int i=0;i<10;i++){
 8         int c = rand();
 9         cout<<c<<endl;
10     }
11     return 0;
12 }

2.srand

rand()算法需要一个起始值,称为种子,根据随机种子,rand算法会产生数据流。如果没有给定的话默认是1,所以如果每次都不指定随机种子,最终得到的数据流会完全相同,rand函数的返回结果也就一模一样。为了避免这种情况发生,需要在rand()调用之前指定种子,C++中是通过srand()函数实现的。

 1 #include <iostream>
 2 #include<cstdlib>
 3 using namespace std;
 4 
 5 int main()
 6 {
 7     unsigned seed;
 8     cin>>seed;
 9     srand(seed);
10     for(int i=0;i<10;i++){
11         int c = rand();
12         cout<<c<<endl;
13     }
14     return 0;
15 }

这样获取随机数都需要手动输入,比较麻烦。另外一种方式是通过当前时间进行初始化。

 1 #include <iostream>
 2 #include<cstdlib>
 3 #include<ctime>
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     srand((unsigned)time(0));
 9     for(int i=0;i<10;i++){
10         int c = rand();
11         cout<<c<<endl;
12     }
13     return 0;
14 }

3. uniform_int_distribution和uniform_real_distribution

上面的两个函数能解决很多问题,但是还是不够全面,如果我们希望生成一个范围内的随机数呢,如果我们希望生成一个double类型的随机数呢?C++为我们提供了uniform_int_distribution和uniform_real_distribution两个模板类。调用这连个模型需要调用random库。

 1 #include <iostream>
 2 #include<cstdlib>
 3 #include<ctime>
 4 #include<random>
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     default_random_engine random(time(0));     //生成随机种子的引擎
10     uniform_int_distribution<>dis1(0,100);
11     uniform_real_distribution<>dis2(0.0,1.0);
12 
13     for(int i=0;i<10;i++)
14         cout<<dis1(random)<<endl;
15     cout<<endl;
16 
17     for(int i=0;i<10;i++)
18         cout<<dis2(random)<<endl;
19     cout<<endl;
20     return 0;
21 }

 

标签:rand,函数,int,C++,uniform,随机,随机数,distribution,include
来源: https://www.cnblogs.com/xyhj/p/15437907.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有