文章目录

  • 随机数
    • 1. c++ 11 random随机数的使用(推荐使用)
      • 1.1
      • 1.2
      • 1.3
      • 1.4
    • 2.1 C++中随机函数rand()和srand()的用法(老本版)
    • 2.2 限制随机数的范围

随机数

C++ 提供了一组函数以生成和使用随机数字。随机数字就是从一组可能的值中进行随机选择而获得的一个值。该组中的值都有相同的被选中的几率。

随机数字常用于许多不同类型的程序中,以下是一些示例:
计算机游戏通常要使用随机数字来模拟一些随机过程,例如掷骰子或发牌。
模拟程序使用随机数字来决定后续将要发生的一系列操作或人与动物等的行为。可以创建使用随机数字的公式以确定特定事件在程序中出现的时间。
数据分析程序可能会使用随机数字随机选择要检验的数据。
计算机安全系统使用随机数字来加密敏感数据。

我们知道,C 中的随机数函数只有一个 rand( ) ,想生成某一区间范围内的随机数乃至随机的浮点数都十分麻烦。

而 C++11 中提供的 random 库解决了这一问题,它能让我们方便地生成需要的随机值。

下面将介绍如何利用 random 库中的组件生成符合条件的随机数。

random 库中的组件分为两类——随机数引擎类和随机数分布类。

随机数引擎类是可以独立运行的随机数发生器,它以均匀的概率生成某一类型的随机数,但无法指定随机数的范围、概率等信息。因此,它也被称为“原始随机数发生器”,由于不能指定生成随机数的范围,它通常不会被单独使用。

随机数分布类是一个需要于随机数引擎类的支持才能运行的类,但是它能根据用户的需求利用随机数引擎生成符合条件的随机数,例如某一区间、某一分布概率的随机数。

所有随机数引擎类都支持的操作如下:

1. c++ 11 random随机数的使用(推荐使用)

常用的随机数类如下:

default_random_engine:随机非负数(不建议单独使用)。
uniform_int_distribution:指定范围的随机非负数。
uniform_real_distribution:指定范围的随机实数。
bernoulli_distribution:指定概率的随机布尔值。
事实上,random 库的功能极其丰富,其中的随机数引擎不止有 default_random_engine 一个,分布类也远远不止上述三个。它还能进行泊松分布、正态分布、抽样分等高级的随机数功能,想详细了解这些内容请去查阅其他资料。我可能要等好久才能把这些内容补上。
详细参考:资料

1.1

1.2

1.3

1.4

2.1 C++中随机函数rand()和srand()的用法(老本版)

C++ 库有一个名为 rand() 的函数,每次调用该函数都将返回一个非负整数。要使用 rand() 函数,必须在程序中包含 头文件。以下是其用法示例:

random_num = rand();

但是,该函数返回的数字其实是伪随机数。这意味着它们具有随机数的表现和属性,但实际上并不是随机的,它们实际上是用算法生成的。

该算法需要一个起始值,称为种子,以生成数字。如果没有给出一个种子,那么它将在每次运行时产生相同的数字流。下面的程序说明了这一点:

#include <iostream>
#include <cstdlib>// Header file needed to use rand
using namespace std;
int main()
{// Generate and printthree random numberscout << rand() << " ";cout << rand() << " ";cout << rand() << endl ;return 0;
}
第1次运行输出结果:
41 18467 : 6334
第2次运行输出结果:
41 18467 6334

要在每次运行程序时获得不同的随机数字流,则必须为随机数生成器提供一个种子以开始。在 C++ 中,这是通过调用 srand 函数完成的。

在 rand 被调用之前,srand 函数要先被调用,并且 srand 在整个程序中仅被调用一次。

#include <iostream>
#include <cstdlib> // Header file needed to use srand and rand
using namespace std;
int main()
{unsigned seed;  // Random generator seed// Get a nseed" value from the usercout << "Enter a seed value: ";cin >> seed;// Set the random generator seed before calling rand()srand(seed);//Now generate and print three random numberscout << rand() << " ";cout << rand() << " ";cout << rand() << endl;return 0;
}
第1次运行结果:
Enter a seed value: 19
100 15331 - 209
第2次运行结果:
Enter a seed value: 171
597 10689 28587

从程序的输出可以看出,每次程序使用不同的种子运行时,都会生成不同的随机数字流。然而,如果再次使用 19 或 171 作为种子运行程序,则将获得与第一次完全相同的数字。

程序的第 12 行中,使用 cin 从用户的输入获取随机数生成器种子的值。实际上,获取种子值的另一个常见做法是调用 time 函数,它是 C++ 标准库的一部分。

time 函数返回从 1970 年 1 月 1 日午夜开始到现在逝去的秒数,因此每次运行程序时,它都将提供不同的种子值。下面程序演示了 time 函数的用法。请注意,在调用它时必须给它传递一个参数 0。同时程序中包含一个新的头文件 ctime,此头文件是使用 time 函数所必需的。
time 函数返回从 1970 年 1 月 1 日午夜开始到现在逝去的秒数,因此每次运行程序时,它都将提供不同的种子值。下面程序演示了 time 函数的用法。请注意,在调用它时必须给它传递一个参数 0。同时程序中包含一个新的头文件 ctime,此头文件是使用 time 函数所必需的。

#include <iostream>
#include <cstdlib> // Header file needed to use srand and rand
#include <ctime> // Header file needed to use time
using namespace std;
int main()
{unsigned seed;  // Random generator seed// Use the time function to get a "seed” value for srandseed = time(0);srand(seed);// Now generate and print three random numberscout << rand() << " " ;cout << rand() << " " ;cout << rand() << endl;return 0;
}

2.2 限制随机数的范围

有时程序需要一个特定范围内的随机数。要将随机数的范围限制在 1 和某个最大值 max 之间的整数,可以使用以下公式:

number = rand() % max + 1;

例如,要生成 1〜6 的随机数来代表骰子的点数,则可以使用以下语句:

dice = rand() % 6 + 1;

【C++】random随机数与【C++11】/rand()和srand()的用法相关推荐

  1. 随机数rand和srand的用法

    有关于rand函数跟srand函数的用法 #include <stdio.h> #include <math.h> int main(){printf("%d\n&q ...

  2. C语言随机数的产生(rand、srand、time函数细节讲解)

    ✨C语言随机数的产生 随机数生成代码: rand函数: srand函数: time函数: time函数补充: time_t类型讨论 time_t指针传入的讨论: 随机数生成代码: 先上代码,再详细解释 ...

  3. c语言随机变量seed,如何产生随机数?C语言rand()和srand()用法详解

    在实际编程中,我们经常需要生成随机数.因此rand()与srand()出现了,本文详解随机数相关内容 一.rand()函数相关 函数头文件:stdlib.h 函数定义:int rand(void) 函 ...

  4. C++中随机函数rand()和srand()的用法

    一.rand() 函数名:   rand      功   能:   随机数发生器    用   法:   int rand(void); 所在头文件: stdlib.h 函数说明 : rand()的 ...

  5. rand和srand的用法(转载)

    首先我们要对rand&srand有个总体的看法:srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数) 表头文件: #include<stdlib.h&g ...

  6. rand和srand的用法

    首先我们要对rand&srand有个总体的看法: srand初始化随机种子,rand产生随机数,下面将详细说明. rand(产生随机数) 表头文件: #include 定义函数 :int ra ...

  7. 【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备

  8. c库的rand/random随机数产生函数性能差?

    有网文称c标准库的rand/random随机数产生函数性能极差.一直信以为真,但从没做过验证.最近因其他因缘,写了些代码专门验证rand/random的性能.结果大出意料,颠覆之前的成见. 结论如下: ...

  9. Random随机数相关工具类

    为什么80%的码农都做不了架构师?>>>    package com.shuqian.tools;import java.util.Random;/*** Random随机数相关工 ...

最新文章

  1. 专访阿里资深研发工程师窦贤明:PG与商业数据库差距并不明显
  2. 1005 Spell It Right (20 分)——13行代码Ac
  3. 深入浅出requireJS-1
  4. mysql错误码1709_MySQL5.6出现ERROR 1709 (HY000): Index column size too large问题的解决方法...
  5. Mac中常用的终端配置命令总结
  6. 内核中的notification chain浅析
  7. 前端开发前的准备工作
  8. coreldraw的线条怎么变成圆头_CDR将照片变线条的三种方法
  9. adobe bridge cs6怎么卸载_安装adobe ps cs6时,一起的Adobe Bridge CS6 (64 Bit)是什么东西?装了需不需要卸载?...
  10. Euclid辗转相除法c语言,euclid辗转相除法求greatest common divisor
  11. excel智能提取_Excel智能艺术家谱
  12. CG 函数之选手得分
  13. Python爬虫学习笔记_DAY_3_Python类型查询与类型转换【Python爬虫】
  14. android 美团多渠道打包方案
  15. laravel mysql 悲观锁_[笔记] 悲观锁与乐观锁
  16. 大数据课程基础与商城,共享单车,互联网广告实战视频
  17. 服务器安装erp系统教程视频教程,erp服务器客户端如何安装教程
  18. springboot+log4j2+dubbo使用案例,dubbo日志没有打印
  19. aws 认证_如何在家工作时获得任何AWS认证
  20. 工具(一):微信小程序反编译获取源码 NoxAppPlayer + wxappUnpacker、ADB + tesseract OCR 读取

热门文章

  1. mysql2008 limit,在SQL Server中实现 Limit m, n 的功能
  2. mysql right join实例_mysql left join,right join,inner join简单实例
  3. linux中断共享程序实现,如何在非实时linux上实现实时应用程序与内核模块之间共享存储器...
  4. IEEE-754标准(32位) 十六进制转换十进制浮点数
  5. Python Qt GUI设计:QLabel标签类(基础篇—11)
  6. 和12岁小同志搞创客开发:如何选择合适的传感器?
  7. Matlab人脸检测算法详解
  8. 【论文速读】基于投影方法的激光雷达点云处理比较
  9. 在Linux部署Nodejs项目,一旦断掉XShell就会导致服务被停掉,真的很郁闷~怎么办?果断用forever
  10. 在Ubuntu 14.04 64bit上使用网络诊断工具mtr