How to generate random numbers in Qt

1. Generate random numbers

       The functions qsrand and qrand are mainly used to generate random numbers. These two functions are in #include <QtGlobal>. qsrand is used to set a seed, which is the starting value for qrand to generate random numbers. For example, qsrand(10), set 10 as the seed, then the random number generated by qrand is between [10, 32767]. If qsrand() has not been called before qrand(), then qrand() will automatically call qsrand(1), that is, the system defaults to 1 as the starting value of the random number. Random numbers generated using the same seed are the same.

       The following code generates 10 random numbers between [0,9].

  1. void generateRandomNumber()  
  2. {  
  3.     qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));  
  4.     for(int i=0; i<10; i++)  
  5.     {  
  6.         int  test = grand ()% 10;  
  7.         qDebug()<<test;  
  8.     }  
  9. }  
        Pay attention to the seed used in the code. There is no fixed value used as the seed here. It is hoped that the random number generated by the function is different every time the function is called (the interval is greater than 1 second).

2. Generate non-repeating random numbers

        There is no particularly good method for this, and you need to calculate it manually. The code is as follows.

  1. void generateUniqueRandomNumber()  
  2. {  
  3.     int i,j;  
  4.     QList<int> numbersList;  
  5.     qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));  
  6.     for(i=0;i<10;i++)  
  7.     {  
  8.         numbersList.append(qrand()%10);  
  9.         bool flag=true;  
  10.         while(flag)  
  11.         {  
  12.             for(j=0;j<i;j++)  
  13.             {  
  14.                 if(numbersList[i]==numbersList[j])  
  15.                 {  
  16.                     break;  
  17.                 }  
  18.             }  
  19.             if(j<i)  
  20.             {  
  21.                 numbersList[i]=rand()%10;  
  22.             }  
  23.             if(j==i)  
  24.             {  
  25.                 flag=!flag;  
  26.             }  
  27.         }  
  28.     }  
  29.     for(i=0;i<10;i++)  
  30.     {  
  31.         qDebug()<<numbersList[i];  
  32.     }  
  33. }  
3. To generate incremental random numbers
        is to sort after random numbers are generated. Qt provides a very useful sorting function qSort. For detailed usage, please refer to Qt Help.
  1. void generateAscendRandomNumber()  
  2. {  
  3.     int i;  
  4.     QList<int> numbersList;  
  5.     qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));  
  6.     for(i=0;i<10;i++)  
  7.     {  
  8.         numbersList.append(qrand()%10);  
  9.     }  
  10.     qSort(numbersList.begin(),numbersList.end());  
  11.     for(i=0;i<10;i++)  
  12.     {  
  13.         qDebug()<<numbersList[i];  
  14.     }  
  15. }  
        The output is shown below, and it can be seen that qSort sorts by default, even if the sequence contains the same number.

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324747459&siteId=291194637