如何在C++ 中生成範圍內的隨機數 - Delft Stack

文章推薦指數: 80 %
投票人數:10人

創建時間: November-24, 2020. 使用C++11 庫生成一個範圍內的隨機數; 使用 rand 函式生成一個範圍內的隨機數. 本文將演示多種C++ 方法,講述如何在指定的數字 ... C++貼士 C++中.cc和.cpp副檔名之間的區別 C++中ConstInt和IntConst之間的區別 C++中指向成員函式的函式指標 C++中有符號和無符號整數表示式之間的比較 C++中的三大法則 C++中的二維陣列(陣列的陣列) C++中的自定義異常 C++中的複數 reportthisad 貼士文章 C++貼士 如何在C++中生成範圍內的隨機數 使用C++11庫生成一個範圍內的隨機數 使用rand函式生成一個範圍內的隨機數 本文將演示多種C++方法,講述如何在指定的數字區間內生成隨機數。

使用C++11庫生成一個範圍內的隨機數 C++在C++11版本中,在新的標頭檔案下增加了隨機數生成的標準庫功能。

標頭檔案提供的RNG工作流功能分為兩部分:隨機引擎和分佈。

隨機引擎負責返回不可預測的位元流。

分佈返回滿足特定概率分佈(如均勻、正態或其他)的隨機數(型別由使用者指定)。

首先,使用者應該用種子值初始化隨機引擎。

建議使用std::random_device作為種子,這是系統特有的非確定性隨機位的來源。

它允許引擎在每次執行時產生不同的隨機位元流。

另一方面,如果使用者需要在多個程式執行中生成相同的序列,則應使用int常量初始化隨機引擎。

接下來,用引數初始化分佈物件,引數為一個區間的最小/最大值,隨機數就是從這個區間生成的。

在下面的例子中,我們使用uniform_int_distribution並任意輸出10個整數到控制檯。

#include #include usingstd::cout; usingstd::endl; constexprintMIN=1; constexprintMAX=100; constexprintRAND_NUMS_TO_GENERATE=10; intmain() { std::random_devicerd; std::default_random_engineeng(rd()); std::uniform_int_distributiondistr(MIN,MAX); for(intn=0;n標頭檔案提供了多個隨機引擎,有不同的演算法和效率權衡。

因此,可以初始化特定的隨機引擎,如下一段程式碼示例所示。

#include #include usingstd::cout; usingstd::endl; constexprintMIN=1; constexprintMAX=100; constexprintRAND_NUMS_TO_GENERATE=10; intmain() { std::random_devicerd; std::mt19937eng(rd()); std::uniform_int_distributiondistr(MIN,MAX); for(intn=0;n #include #include usingstd::cout; usingstd::endl; constexprintMIN=1; constexprintMAX=100; constexprintRAND_NUMS_TO_GENERATE=10; intmain() { std::srand(std::time(nullptr)); for(inti=0;i



請為這篇文章評分?