Qt生成随机数的方法

 更新时间:2021年11月26日 11:41:46   作者:草上爬  
本文主要介绍了Qt生成随机数,生成随机数主要用到了函数qsrand和qrand,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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生成随机数的方法的文章就介绍到这了,更多相关Qt 随机数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:

相关文章

  • QT实现简单打地鼠游戏

    QT实现简单打地鼠游戏

    这篇文章主要为大家详细介绍了QT实现简单打地鼠游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-12-12
  • C语言实现电话簿管理系统课程设计

    C语言实现电话簿管理系统课程设计

    这篇文章主要为大家详细介绍了C语言实现电话簿管理系统课程设计,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • C++中的long long与__int64

    C++中的long long与__int64

    这篇文章主要介绍C++中的long long与__int64,在C++ Primer当中提到的64位的int只有long long,但是在实际各种各样的C++编译器当中,64位的int一直有两种标准.一种是long long,还有一种是__int64,非主流的VC甚至还支持_int64,下面文章将介绍具体内容,需要的朋友可以参考一下
    2021-11-11
  • C++实现宾馆房间管理系统

    C++实现宾馆房间管理系统

    这篇文章主要为大家详细介绍了C++实现宾馆房间管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 简单实现C++复数计算器

    简单实现C++复数计算器

    这篇文章主要为大家详细介绍了C++简单实现复数计算器的的相关代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • C++ Boost Utility超详细讲解

    C++ Boost Utility超详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-12-12
  • C++中二进制数据序列化和反序列化详解

    C++中二进制数据序列化和反序列化详解

    这篇文章主要为大家详细介绍了C++中二进制数据序列化和反序列化的相关知识,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的小伙伴可以了解下
    2023-11-11
  • C++ primer超详细讲解关联容器

    C++ primer超详细讲解关联容器

    两个主要的关联容器为map和set,map中元素是一些关键字—值对,关键字起索引的作用,值则表示与索引相关联的数据。set中每个元素只包含一个关键字,set支持高效的关键字查询操作——检查一个给定关键字是否在set中
    2022-07-07
  • C++ LeetCode543题解二叉树直径

    C++ LeetCode543题解二叉树直径

    这篇文章主要为大家介绍了C++ LeetCode543题解二叉树直径,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • C语言函数多个返回值方式

    C语言函数多个返回值方式

    这篇文章主要介绍了C语言函数多个返回值方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02

最新评论