介绍使用qsrand和qrand生成随机数。
生成随机数
生成随机数主要用到了函数qsrand和qrand,qsrand用来设置种子点,该种子为qrand生成随机数的起始值。如果不调用qsrand,那么qrand()就会自动调用qsrand(1),即系统默认将1作为随机数的起始值。使用相同的种子生成的随机数一样。
下列代码生成了[0,99]之间的随机数:
qsrand(QTime(0,0,0).secsTo(QTime::currentTime()));
int test =qrand()%100;
生成不重复的随机数
代码如下:
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];
}
}
生成递增的随机数
随机数生成后进行排序,使用排序函数qSort。
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];
}
}
新版本的QT,qsrand和qrand函数已经丢弃,使用新的类QRandomGenerator。如需要生成正随机数:
quint32 value = QRandomGenerator::global()->generate();