国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

C++隨機(jī)數(shù)生成:std標(biāo)準(zhǔn)庫和Qt自帶方法

這篇具有很好參考價值的文章主要介紹了C++隨機(jī)數(shù)生成:std標(biāo)準(zhǔn)庫和Qt自帶方法。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

std標(biāo)準(zhǔn)庫

std::rand()是C++中的一個隨機(jī)數(shù)函數(shù),它生成一個范圍在0到RAND_MAX之間的偽隨機(jī)整數(shù)。

在使用std::rand()之前,需要包含<cstdlib>頭文件。

#include <cstdlib>

設(shè)置種子

在每次程序運(yùn)行時,通常需要使用不同的種子值來初始化隨機(jī)數(shù)生成器??梢允褂?code>std::srand()函數(shù)來設(shè)置種子值。

#include <cstdlib>
#include <ctime>

int main() {
    // 設(shè)置種子為當(dāng)前時間
    std::srand(std::time(0));

    // 生成隨機(jī)數(shù)
    int random_number = std::rand();

    // 打印生成的隨機(jī)數(shù)
    std::cout << "隨機(jī)數(shù): " << random_number << std::endl;

    return 0;
}

設(shè)置種子的目的是為了引入隨機(jī)性,使得每次程序運(yùn)行時生成不同的隨機(jī)數(shù)序列。通過在每次運(yùn)行時使用不同的種子值,可以得到更多不同的隨機(jī)數(shù)。

通常,使用當(dāng)前時間作為種子是一種常見的方法,因為時間是不斷變化的,可以保證每次程序運(yùn)行時使用不同的種子值。通過使用std::time(0)函數(shù)獲取當(dāng)前時間作為種子,可以確保每次運(yùn)行時生成不同的隨機(jī)數(shù)序列。

限制隨機(jī)數(shù)范圍

std::rand()生成的隨機(jī)數(shù)范圍是0到RAND_MAX。如果需要生成特定范圍內(nèi)的隨機(jī)數(shù),可以使用取模運(yùn)算符和適當(dāng)?shù)目s放因子來限制范圍。

#include <cstdlib>
#include <ctime>

int main() {
    std::srand(std::time(0));

    // 生成min到max之間的隨機(jī)數(shù)
    int random_number = min + rand() % (max - min + 1);

    // 打印生成的隨機(jī)數(shù)
    std::cout << "隨機(jī)數(shù): " << random_number << std::endl;

    return 0;
}

我們使用std::rand() % 100 + 1將生成的隨機(jī)數(shù)限制在1到100之間。

使用 min + rand() % (max - min + 1) 生成的隨機(jī)數(shù)范圍是閉合的,即包含了 min 和 max。這是因為 % 運(yùn)算符取模后的結(jié)果范圍是從 0 到除數(shù)減一。

需要注意的是,std::rand()生成的隨機(jī)數(shù)是偽隨機(jī)數(shù),其質(zhì)量和隨機(jī)性可能不如C++11引入的更現(xiàn)代和靈活的隨機(jī)數(shù)庫<random>。如果需要更好的隨機(jī)性或更大的靈活性,建議使用<random>庫來生成隨機(jī)數(shù)。

Qt隨機(jī)數(shù)

Qt是一個跨平臺的C++開發(fā)框架,其中包含了很多有用的類、函數(shù)庫,其中包含了產(chǎn)生隨機(jī)數(shù)的函數(shù)。

QRandomGenerator::global()->generate();

這個函數(shù)會返回一個無符號的隨機(jī)數(shù),并且可以設(shè)定隨機(jī)數(shù)的范圍,如下:

// 返回一個0~9之間的數(shù)
QRandomGenerator::global()->bounded(10); 

// 返回一個1~10之間的數(shù)
QRandomGenerator::global()->bounded(1, 11); 

在使用隨機(jī)數(shù)發(fā)生器前,需要進(jìn)行初始化操作,一般使用設(shè)備存儲的熵來進(jìn)行初始化,如下:

QRandomGenerator randGen(QDateTime::currentMSecsSinceEpoch() ^
                         static_cast<quint64>(reinterpret_cast<quintptr>(QThread::currentThread())));
randGen.generate();

這里使用了系統(tǒng)時間和當(dāng)前線程的地址進(jìn)行異或操作,確保初始化的唯一性。

注意事項

使用隨機(jī)數(shù)時需要注意一些事項,如唯一性、安全性等等。

唯一性

在某些應(yīng)用場景下,需要確保產(chǎn)生的隨機(jī)數(shù)唯一,如生成訂單號、用戶ID等等。

// 隨機(jī)生成一個唯一的ID
quint64 randID = QDateTime::currentMSecsSinceEpoch() ^ static_cast<quint64>(reinterpret_cast<quintptr>(QThread::currentThread()));

安全性

在密碼學(xué)、數(shù)據(jù)加密等領(lǐng)域使用隨機(jī)數(shù)時需要注意安全性問題,需要使用高質(zhì)量的隨機(jī)數(shù)發(fā)生器,如硬件隨機(jī)數(shù)發(fā)生器。

// 使用硬件隨機(jī)數(shù)發(fā)生器
QByteArray data;
if (QRandomGenerator::securelySeeded()) {
    data.resize(16);
    if (RAND_bytes((unsigned char*)data.constData(), data.size()) != 1) {
        qWarning() << "RAND_bytes failed";
    }
}

分布

隨機(jī)數(shù)發(fā)生器產(chǎn)生的數(shù)不一定符合某些分布,如正態(tài)分布、均勻分布等等,需要進(jìn)行轉(zhuǎn)換處理。文章來源地址http://www.zghlxwxcb.cn/news/detail-795061.html

// 產(chǎn)生正態(tài)分布隨機(jī)數(shù)
double mean = 10.0;
double stddev = 2.0;
double randNum = mean + NormRand()*stddev;

到了這里,關(guān)于C++隨機(jī)數(shù)生成:std標(biāo)準(zhǔn)庫和Qt自帶方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【Python爬蟲與數(shù)據(jù)分析】時間、日期、隨機(jī)數(shù)標(biāo)準(zhǔn)庫

    【Python爬蟲與數(shù)據(jù)分析】時間、日期、隨機(jī)數(shù)標(biāo)準(zhǔn)庫

    目錄 一、模塊化概述 二、time庫 1. 時間獲取 2. 時間格式化 3. 程序計時 三、datetime庫 1. datetime.datetime類 2. datetime.timedelta類 四、random庫 1. 基本隨機(jī)函數(shù) 2. 擴(kuò)展隨機(jī)函數(shù) 3. 隨機(jī)時間的生成 Python程序由模塊組成,一個模塊對應(yīng)一個 .py 源文件。 模塊分為 標(biāo)準(zhǔn)庫模塊 和 自定義模

    2024年02月13日
    瀏覽(20)
  • Unity 中的隨機(jī)數(shù)的基礎(chǔ)常用的隨機(jī)數(shù)生成方法

    在 Unity 中,可以使用 Random 類來生成隨機(jī)數(shù)。以下是一些常用的隨機(jī)數(shù)生成方法: Random.Range(min, max):生成一個在[min, max)范圍內(nèi)的隨機(jī)整數(shù)。 Random.value:生成一個在[0, 1)范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)。 Random.insideUnitCircle:生成一個在單位圓內(nèi)的隨機(jī)二維向量。 Random.insideUnitSphere:生成

    2024年02月20日
    瀏覽(43)
  • JS - 生成隨機(jī)數(shù)的方法匯總(不同范圍、類型的隨機(jī)數(shù))

    (1)使用 random() 方法可以返回一個介于 0 ~ 1 之間的偽隨機(jī)數(shù)(包括 0,不包括 1)。 (2)下面是一個測試樣例 (1)這種最簡單,因為和 random 的特點(diǎn)保持一致。只需使用如下公式即可: (2)比如下面生成 [10,15) 范圍內(nèi)的隨機(jī)浮點(diǎn)數(shù)。 因為 random 的特點(diǎn),要取得這幾個區(qū)間

    2023年04月08日
    瀏覽(28)
  • Qt產(chǎn)生隨機(jī)數(shù)

    提問: 有沒有小伙伴遇到這么一種情況,使用rand()和qrand()函數(shù)生成的隨機(jī)數(shù)好像不是那么隨機(jī),每次都一樣。那這種就叫做“偽隨機(jī)”,因為沒有種隨機(jī)數(shù)種子,所以系統(tǒng)默認(rèn)隨機(jī)數(shù)種子是固定值。 在Qt項目中呢,生成隨機(jī)數(shù)有兩個步驟: 1.使用qsrand()種隨機(jī)數(shù)種子 2.調(diào)用

    2024年02月11日
    瀏覽(24)
  • Qt之隨機(jī)數(shù)

    ? ? ? ? 介紹使用qsrand和qrand生成隨機(jī)數(shù)。 ????????生成隨機(jī)數(shù)主要用到了函數(shù)qsrand和qrand,qsrand用來設(shè)置種子點(diǎn),該種子為qrand生成隨機(jī)數(shù)的起始值。如果不調(diào)用qsrand,那么qrand()就會自動調(diào)用qsrand(1),即系統(tǒng)默認(rèn)將1作為隨機(jī)數(shù)的起始值。使用相同的種子生成的隨機(jī)數(shù)一樣

    2024年02月09日
    瀏覽(15)
  • 【Python爬蟲與數(shù)據(jù)分析】爬蟲常用標(biāo)準(zhǔn)庫(時間、隨機(jī)數(shù))

    【Python爬蟲與數(shù)據(jù)分析】爬蟲常用標(biāo)準(zhǔn)庫(時間、隨機(jī)數(shù))

    目錄 一、模塊化概述 二、time庫 1. 時間獲取 2. 時間格式化 3. 程序計時 三、datetime庫 1. datetime.datetime類 2. datetime.timedelta類 四、random庫 1. 基本隨機(jī)函數(shù) 2. 擴(kuò)展隨機(jī)函數(shù) 3. 隨機(jī)時間的生成 Python程序由模塊組成,一個模塊對應(yīng)一個 .py 源文件。 模塊分為 標(biāo)準(zhǔn)庫模塊 和 自定義模

    2024年02月15日
    瀏覽(28)
  • java生成隨機(jī)數(shù)

    java生成隨機(jī)數(shù)

    ?? bound 必須是正數(shù)。 以下代碼生成的是 0 到 30 的隨機(jī)數(shù)。 生成區(qū)間的隨機(jī)數(shù):[最小值,最大值] 學(xué)的不是技術(shù),更是夢想?。?!

    2024年02月07日
    瀏覽(37)
  • 生成隨機(jī)數(shù)

    用于產(chǎn)生隨機(jī)數(shù) boolean nextBoolean() : 返回下一個偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的均勻分布的 boolean 值。 void nextBytes(byte[] bytes) : 生成隨機(jī)字節(jié)并將其置于用戶提供的 byte 數(shù)組中。 double nextDouble() : 返回下一個偽隨機(jī)數(shù),它是取自此隨機(jī)數(shù)生成器序列的、在 0.0 和 1.0 之

    2024年02月03日
    瀏覽(30)
  • Flutter 生成隨機(jī)數(shù)

    如何讓隨機(jī)數(shù)變化? 我們嘗試過的都知道,當(dāng)你創(chuàng)建出來一個隨機(jī)數(shù)后,調(diào)用他他的值是隨機(jī)的,但是,這時候他的值就會固定住,不管怎么樣都是隨機(jī)出來的那個數(shù),如果想要他每次都不一樣的話,我們就想要使用刷新來讓他變化了。 我們可以使用這樣的方法來使他每次不一

    2024年02月13日
    瀏覽(21)
  • haiku生成隨機(jī)數(shù)

    Haiku 遵循 JAX 的設(shè)計,生成的隨機(jī)數(shù)是兩個元素組成的列表。其中第一個元素是用于生成偽隨機(jī)數(shù)的狀態(tài),第二個元素是用于分發(fā)密鑰的子鍵。兩個元素分別用于狀態(tài)和子鍵,確保在分布式計算或并行計算中,多個隨機(jī)數(shù)生成器的狀態(tài)可以在一定程度上相互影響,從而提高隨

    2024年01月20日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包