C++中生成随机数的方法总结

 更新时间:2024年05月08日 12:02:37   作者:litanyuan  
这篇文章主要介绍了C++中生成随机数的方法总结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

背景

C++ 11 在头文件 #include 中定义了随机数库,也可以使用 C 中生成随机数的方法。

C 生成随机数

概述

C 语言中使用 rand() 函数产生 0 ~ RAND_MAX 范围内均匀分布到整数,其中 RAND_MAX 是和系统相关的一个固定值。

#include<stdlib.h> 
#include<time.h> 

srand(time(nullptr));//设置随机数种子
rand();//产生一个随机数

限定随机数范围

{//产生 [0,b) 范围内到随机数  
  int randoxNumber = rand() % b ;
}
{//产生 [a,b) 范围内到随机数 
    int randoxNumber = a + rand() % ( b -a ) ;
}
{//产生 [a,b] 范围内到随机数 
    int randoxNumber = a + rand() % ( b -a +1 ) ;
}
{//产生 [0,1] 范围内到随机小数 
    double randoxNumber =rand() / RAND_MAX
}
{//产生 [0,1) 范围内到随机小数 
    double randoxNumber =rand() / ( RAND_MAX +1 )
}

C++ 中的随机数

概述

C++ 11 在头文件 #include 中定义了随机数库,包括随机数生成器和随机数分布器。

随机数生成器

①.概述

随机数生成器用来使用指定的种子产生一个随机数。

②.random_device

random_device 是标准库提供到一个非确定性随机数生成器,使用硬件作为随机数来源,故其调用代价较高,一般用来产生随机数种子。

random_device rd;
for (int i = 0; i < 10; ++i)
{
  cout << rd() << endl;
}

在这里插入图片描述

③.default_random_engine

default_random_engine 是标准库提供的默认随机数生成器,其实现和编译器有关。

random_device rd;
  
default_random_engine r_eng(rd());
for (int i = 0; i < 10; ++i)
{
  cout << r_eng() << endl;
}

④.minstd_rand

minstd_rand 是标准库提供的采用线性同余算法的伪随机数生成器。

random_device rd;
  
minstd_rand   r_eng(rd());
for (int i = 0; i < 10; ++i)
{
  cout << r_eng() << endl;
}

⑤.mt19937

mt19937 是标准库提供的采用梅森旋转算法的伪随机数生成器,可以快速产生高质量到随机数。

random_device rd;
  
mt19937  r_eng(rd());
for (int i = 0; i < 10; ++i)
{
  cout << r_eng() << endl;
}

⑥.ranlux24_base

ranlux24_base 是标准库提供的采用带进位减法的伪随机数生成器。

random_device rd;
  
ranlux24_base  r_eng(rd());
for (int i = 0; i < 10; ++i)
{
  cout << r_eng() << endl;
}

随机数分布器

①.概述

随机数分布器用于限定生成随机数的范围及分布类型。

②.uniform_int_distribution

uniform_int_distribution 用于生成指定范围的均匀分布的整数。

random_device rd;//用于生成随机数种子
mt19937 r_eng(rd());//随机数生成器  
uniform_int_distribution<int> dis(1, 100);//随机数分布器 闭区间

for (int i = 0; i < 10; ++i)
{
  cout << dis(r_eng) << endl;
}

在这里插入图片描述

③.uniform_real_distribution

uniform_real_distribution 用于生成指定范围的均匀分布的浮点数。

random_device rd;//用于生成随机数种子
mt19937 r_eng(rd());//随机数生成器  
uniform_real_distribution<double> dis(1, 100);//随机数分布器 闭区间

for (int i = 0; i < 10; ++i)
{
  cout << dis(r_eng) << endl;
}

在这里插入图片描述

④.normal_distribution

normal_distribution 用于生成指定均值和方差的正态分布的浮点数。

random_device rd;//用于生成随机数种子
mt19937 r_eng(rd());//随机数生成器  
normal_distribution  <> dis(4, 1.5);//随机数分布器,均值、方差

for (int i = 0; i < 10; ++i)
{
  cout << dis(r_eng) << endl;
}

在这里插入图片描述

⑤.bernoulli_distribution

bernoulli_distribution 用于生成二项分布到布尔值,可以指定 true 的概率。

random_device rd;//用于生成随机数种子
mt19937 r_eng(rd());//随机数生成器  
bernoulli_distribution   dis( 0.6);//随机数分布器,生成 1 的概率是 0.6

for (int i = 0; i < 10; ++i)
{
  cout << dis(r_eng) << endl;
}

在这里插入图片描述

Qt 中的随机数

概述

Qt 中生成随机数的方法和 C 语言中差不多,对应到函数为 qsrand() 、qrand()。使用使需要包含头文件 #include 。

代码示例

auto seed = QDateTime::currentDateTime().toMSecsSinceEpoch();

qsrand(seed);
for (int i = 0; i < 10; ++i)
{
  qDebug() << qrand() % 10;// 0 - 9 范围
}

以上就是C++中生成随机数的方法总结的详细内容,更多关于C++生成随机数的资料请关注脚本之家其它相关文章!

相关文章

  • C++中strtok()函数的用法介绍

    C++中strtok()函数的用法介绍

    以下是对C++中strtok()函数的使用方法进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-09-09
  • OpenGL实现鼠标移动方块

    OpenGL实现鼠标移动方块

    这篇文章主要为大家详细介绍了OpenGL实现鼠标移动方块,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-08-08
  • 详解C语言之文件操作下)

    详解C语言之文件操作下)

    这篇文章主要介绍了关于C语言文件操作方法的相关资料,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助
    2021-11-11
  • C++重载输入和输出运算符详解

    C++重载输入和输出运算符详解

    在C++中,标准库本身已经对左移运算符<<和右移运算符>>分别进行了重载,使其能够用于不同数据的输入输出,本节以前面的 complex 类为例来演示输入输出运算符的重载,需要的朋友可以参考下
    2023-09-09
  • C++ opencv霍夫圆检测使用案例详解

    C++ opencv霍夫圆检测使用案例详解

    这篇文章主要介绍了C++ opencv霍夫圆检测使用案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-09-09
  • 七大经典排序算法图解

    七大经典排序算法图解

    本文详细讲解了七大经典排序算法,文中通过示例代码介绍的非常详细。对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-12-12
  • QML中动态与静态模型应用详解

    QML中动态与静态模型应用详解

    QML是一种描述性的脚本语言,文件格式以.qml结尾。语法格式非常像CSS(参考后文具体例子),但又支持javascript形式的编程控制。QtDesigner可以设计出·ui界面文件,但是不支持和Qt原生C++代码的交互
    2022-08-08
  • C语言实现经典24点算法

    C语言实现经典24点算法

    这篇文章主要为大家详细介绍了C语言实现经典24点算法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • C语言实现奇数阶魔方阵的方法

    C语言实现奇数阶魔方阵的方法

    这篇文章主要介绍了C语言实现奇数阶魔方阵的方法,涉及数组及相关数学函数的使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-02-02
  • C/C++实现投骰子游戏

    C/C++实现投骰子游戏

    这篇文章主要为大家详细介绍了C/C++实现投骰子游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-11-11

最新评论