00. 目录
01. 概述
随机数就是就随机数种子中取出的数。
种子就是个序号,这个序号交给一个数列管理器,通过这个序号,你从管理器中取出一个数列,这个数列就是你通过那个序号得到的随机数。
但这个随技术并不真正随机。因为它是通过某个算法的得到。也就是说你给数列管理器同一个序号将得到同样一个“随机”数列。也就是说种子和随机数列是一一对应的。
{An}=f(x), x 就是种子,F()是算法,{An}是数列,这个数列看上去是随机的,这是因为An的通项很复杂。
例如:从1、2、3、4、5、6、7、8、9、0这十个数中随机取出一个数,取出的数是6的话,那么6就叫随机数。十个数字就叫随机数种子。如果是从1到50之间取数字,取出的数字叫随机数,这1到50那50个数字就叫随机数种子。
02. 开发环境
Windows系统:Windows10
Qt版本:Qt5.15或者Qt6
03. QRandomGenerator类介绍
QRandomGenerator类允许从高质量的随机数生成器获取随机值。
QRandomGenerator可用于从高质量随机数生成器生成随机值。与c++随机引擎一样,QRandomGenerator可以通过构造函数使用用户提供的值进行播种。当播
种时,这个类生成的数字序列是确定的。也就是说,给定相同的种子数据,QRandomGenerator将生成相同的数字序列。但是考虑到不同的种子,结果会有很大
的不同。
可以使用QRandomGenerator:: securely()创建一个QRandomGenerator,该生成器安全地使用QRandomGenerator::system()进行播种,这意味着它生成的数字
序列不容易预测。另外,QRandomGenerator::global()返回QRandomGenerator的全局实例,Qt将确保该实例被安全播种。这个对象是线程安全的,可以在大多
数情况下共享,并且总是从QRandomGenerator::system()中获得。
system()可用于访问系统的加密安全随机生成器。在Unix系统上,它相当于从/dev/urandom或getrandom()或getentropy()系统调用中读取数据。
该类可以生成32位或64位的数量,也可以填充这些数量的数组。生成新值的最常见方法是调用generate()、generate64()或fillRange()函数。有人会把它当作:
qurandomgenerator::global()->generate();
此外,它还提供了一个浮点函数generateDouble(),该函数返回范围为0,1的数字。
QRandomGenerator是根据c++标准库中对随机数引擎的要求建模的,可以在标准库引擎可以使用的几乎所有上下文中使用。这些要求的例外情况如下:
除了std::seed_seq本身之外,QRandomGenerator不支持从其他类似于种子序列的类中进行播种;
QRandomGenerator与std::ostream或std::istream不可比较(但可复制)或可流。
QRandomGenerator还兼容统一分布类std::uniform_int_distribution和std:uniform_real_distribution,以及自由函数std::generate_canonical。例如,下面的
代码可以用来生成范围为[1,2.5]的浮点数:
std::uniform_real_distribution dist(1, 2.5);
return dist(*QRandomGenerator::global());
bound(边界范围)
double bounded(double highest)
quint32 bounded(quint32 highest)
int bounded(int highest)
quint32 bounded(quint32 lowest, quint32 highest)
int bounded(int lowest, int highest)
fillRange(填充数组)
void fillRange(UInt *buffer, qsizetype count)
void fillRange(UInt (&)[N] buffer = ...)
generate(产生随机数)
quint64 generate64()
quint32 generate()
void generate(ForwardIterator begin, ForwardIterator end)
double generateDouble()
04. 程序示例
#include <QCoreApplication>
#include <QTime>
#include <QRandomGenerator>
#include <QDebug>
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
//方法一:已经被废弃,不建议使用
//设置随机种子
qsrand(QTime::currentTime().msec());
//生成10以内的随机数
qDebug() << qrand() % 10;
// 方法二: 最新退出的方法 推荐使用
//生成一个0和10之间的整数
qDebug() << QRandomGenerator::global()->bounded(10);
//生成一个0和10.123之间的浮点数
qDebug() << QRandomGenerator::global()->bounded(10.123);
//生成一个10和15之间的整数
qDebug() << QRandomGenerator::global()->bounded(10, 15);
return a.exec();
}
05. 执行结果
执行结果经经仅供参考,每次执行结果可能不一样。
3
3
4.70804
10
06. 附录
源码下载:【Qt】Qt产生随机数.rar
暂无评论内容