芭蕉树上第十九根芭蕉-- Qt生成随机数的方法
1.生成随机数
生成随机数主要用到了函数qsrand和qrand,这两个函数在#include <QtGlobal>中,qsrand用来设置一个种子,该种子为qrand生成随机数的起始值。比如说qsrand(10),设置10为种子,那么qrand生成的随机数就在[10,32767]之间。而如果在qrand()前没有调用过qsrand(),那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。使用相同的种子生成的随机数一样。
下列代码生成了[0,9]之间的10个随机数。
void generateRandomNumber()
{
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
for(int i=0; i<10; i++)
{
int test =qrand()%10;
qDebug()<<test;
}
}
注意代码中使用的种子,这里没有用固定值来作为种子,是希望函数在每次调用(间隔大于1秒)时生成的随机数不一样。
2.生成不重复的随机数
这个没有特别好的方法,需要自己手动计算,代码如下。
void generateUniqueRandomNumber()
{
int i,j;
QList<int> numbersList;
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
for(i=0;i<10;i++)
{
numbersList.append(qrand()%10);
bool flag=true;
while(flag)
{
for(j=0;j<i;j++)
{
if(numbersList[i]==numbersList[j])
{
break;
}
}
if(j<i)
{
numbersList[i]=rand()%10;
}
if(j==i)
{
flag=!flag;
}
}
}
for(i=0;i<10;i++)
{
qDebug()<<numbersList[i];
}
}
3.生成递增的随机数
就是在随机数生成后进行排序,Qt提供了一个非常好用的排序函数qSort,详细的用法可参考Qt帮助。
void generateAscendRandomNumber()
{
int i;
QList<int> numbersList;
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
for(i=0;i<10;i++)
{
numbersList.append(qrand()%10);
}
qSort(numbersList.begin(),numbersList.end());
for(i=0;i<10;i++)
{
qDebug()<<numbersList[i];
}
}
输出结果如下所示,可以看出qSort默认递增排序,即使数列中包含相同的数。
芭蕉树上第十九根芭蕉-- Qt生成随机数的方法相关推荐
- 操作系统(十九)进程互斥的软件实现方法
2.3.2 进程互斥的软件实现方法 目录 2.3.2 进程互斥的软件实现方法 2.3.2.1 单标志法 2.3.2.2 双标志先检查法 2.3.2.3 双标志后检查法 2.3.2.4 Peterson ...
- 五十九、使用ZXing生成二维码
@Author:Runsen @Date:2020/7/12 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...
- Qt生成随机数-qrand及QRandomGenerator
//老方法 //利用qrand和qsrand生成随机数 //位于QtGlobal中 //例,生成一个0和10之间的随机数 qsrand(QTime::currentTime().msec()); // ...
- 【正点原子MP157连载】第十九章 Buildroot根文件系统构建-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- 【正点原子Linux连载】 第十九章 CAN Bus 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 3)全套实验源码+手册+视频下载地址: ...
- OpenGL(十九)——Qt OpenGL波动纹理(旗子的飘动效果)
OpenGL(十九)--Qt OpenGL波动纹理(旗子的飘动效果) 一.场景 在日常的项目中,我们经常会实现波动的一些纹理效果,比如飘动的旗子,水的波纹,地图上某一点的波浪圈圈等...,本篇介绍波动 ...
- Python界面编程第十九课:Pyside2 (Qt For Python)创建菜单
先看完整代码: from PySide2.QtWidgets import QApplication,QMainWindow, QAction import sys from PySide2.QtGu ...
- WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形
原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...
- 如何选择适合你的兴趣爱好(二十九),少林
围城网的摇摇今天给大家带来了"如何选择适合你的兴趣爱好"系列专辑的第二十九讲--少林.少林是中华武术中体系最庞大的门派,武功套路高达七百种以上,又因以禅入武,习武修禅,又有「武术禅 ...
- 微信小程序从入坑到放弃二十九:一个小场景搞懂冒泡事件bindtap和catchtap的区别
摘要: 在微信小程序中,bindtap事件会产生冒泡,若不加以拦截,会一直冒泡到顶端.在某些情况下,一次点击会触发若干点击事件.为了防止冒泡,使用catchtap即可解决问题.在有全屏半透明背景的弹出 ...
最新文章
- .NET调用JAVA的WebService方法
- 基于云的SD-WAN骨干接入服务
- Cytology: Diagnostic Principles and Clinical Correlates 细胞学: 诊断原则与临床相关性 PDF
- linux调度全景指南
- Debian GNU/Linux 的发展简史
- JS-面向对象--创建具有私有属性的对象(2个方法)
- Linux创建名为vgtest的分区,第五周作业,
- 小赛毛游C记——初始C语言(4)
- 集成灶哪个品牌性价比高质量好,过来人实话实说?
- 带符号整数中负数采用什么编码_转载:二进制编码--负数
- hpc超级计算机大会,国家超算广州中心主任卢宇彤当选HPC 2019大会程序主席
- Android加载预览PDF文件
- 智能时代为什么需要区块链技术?
- 【腾讯TMQ】基于模型的自动化测试工具——GraphWalker
- 2.1 Oracle 服务器
- 解决无线网卡工作一段时间USB就自动断开连接(by liukun321咕唧咕唧)
- Python 实现串口调试助手
- 如何在 Linux 系统中判断安装、使用了多少内存 | Linux 中国
- 什么软件可以识别图片上的文字?这些软件值得收藏
- 高空间分辨率的遥感数据源及其所在遥感平台、传感器特点
热门文章
- pycharm新建项目时选择virtualenv与existing interpreter
- 在vscode拉取代码时would clobber existing tag
- 最全的LBS手机定位技术说明
- Mac修改登陆界面背景图片,开机登陆界面,替换沙漠背景图 @macOS Mojave - 10.14.x
- linux消息分发机制,RabbitMQ消息分发轮询和Message Acknowledgment
- Serialize Your Deck with Positron [XML Serialization, XSD, C#]
- Mongodb: Sort operation used more than the maximum 33554432 bytes of RAM
- Oracle RMAN无法删除归档一例
- SRAM与DRAM的区别
- 个人邮箱怎么注册?手机怎么注册个人邮箱呢?