文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

C++产生随机数的方法有哪些

2023-07-05 11:02

关注

这篇文章主要介绍“C++产生随机数的方法有哪些”,在日常操作中,相信很多人在C++产生随机数的方法有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++产生随机数的方法有哪些”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

使用cstdlib库

C++11之前,C和C++都用相同的方法来产生随机数(伪随机数),即rand()函数,用法如下:

1)使用srand()撒一个种子

功能:初始化随机数发生器

用法:void srand(unsigned int seed)

2)使用rand()产生随机数

功能:随机数发生器

用法:int rand(void)

3)控制随机数范围

要取得 [a,b) 的随机整数,使用 (rand() % (b-a))+ a;

要取得 [a,b] 的随机整数,使用 (rand() % (b-a+1))+ a;

要取得 (a,b] 的随机整数,使用 (rand() % (b-a))+ a + 1;

** 参考:C++ rand 与 srand 的用法

4)示例代码

#include <iostream>#include <ctime>#include <cstdlib> int getRand(int min, int max); int main() {     srand(time(0));     for (int i=0; i<10; i++) {        int r = getRand(2,20);        std::cout << r << std::endl;    }     return 0;} // 左闭右闭区间int getRand(int min, int max) {    return ( rand() % (max - min + 1) ) + min ;}

使用random库:c++11 random library

C++11之前,无论是C,还是C++都使用相同方式的来生成随机数,而在C++11中提供了随机数库,包括随机数引擎类、随机数分布类,简介如下:

随机数引擎类

一般使用 default_random_engine 类,产生随机非负数(不推荐直接使用)

直接使用时:

#include <iostream>#include <ctime>#include <random> int main() {     std::default_random_engine e;    e.seed(time(0));     for (int i=0; i<10; i++) {        std::cout << e() << std::endl;    }     return 0;}

输出结果:

16807
282475249
1622650073
984943658
1144108930
470211272
101027544
1457850878
1458777923
2007237709

随机数分布类

uniform_int_distribution:产生均匀分布的整数

示例代码:

#include <iostream>#include <ctime>#include <random> int main() {     std::default_random_engine e;    std::uniform_int_distribution<int> u(2,20); // 左闭右闭区间    e.seed(time(0));     for (int i=0; i<10; i++) {        std::cout << u(e) << std::endl;    }     return 0;}

输出结果:

4
5
16
17
15
17
6
10
13
13

uniform_real_distribution:产生均匀分布的实数
#include <iostream>#include <ctime>#include <random> int main() {     std::default_random_engine e;    std::uniform_real_distribution<double> u(1.5,19.5); // 左闭右闭区间    e.seed(time(0));     for (int i=0; i<10; i++) {        std::cout << u(e) << std::endl;    }     return 0;}

输出结果:

9673
2.29179
9.82668
9.82764
10.2394
13.8324
2.95336
9.72177
16.5145
12.1421

normal_distribution:产生正态分布的实数

示例代码:

#include <iostream>#include <ctime>#include <random> int main() {     std::default_random_engine e;    std::normal_distribution<double> u(0,1); // 均值为0,标准差为1    e.seed(time(0));     for (int i=0; i<10; i++) {        std::cout << u(e) << std::endl;    }     return 0;}

输出结果:

0.390995
-0.680137
-1.02953
-0.53243
0.375886
-0.19804
-0.796159
0.837714
0.899632
2.06609

bernoulli_distribution:生成二项分布的布尔值
#include <iostream>#include <ctime>#include <random> int main() {     std::default_random_engine e;    std::bernoulli_distribution u(0.8); // 生成1的概率为0.8    e.seed(time(0));     for (int i=0; i<10; i++) {        std::cout << u(e) << std::endl;    }     return 0;}

输出结果:

1
0
1
1
1
1
1
1
1
1

到此,关于“C++产生随机数的方法有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯