一、c++ random函數
c++中提供的random庫是一個偽隨機數生成器。偽隨機數是指,雖然不是真正隨機生成的,但是具有隨機數的特徵。random庫中包含兩個主要的類:
1. std::linear_congruential_engine:線性同餘發生器,該發生器可以生成最簡單、最頻繁的偽隨機數。具體實現方式是通過給定一個公式,生成下一次的隨機數。 2. std::mersenne_twister_engine: 梅森旋轉發生器,其生成的偽隨機數與線性同餘發生器相比具有更高的隨機性和更長的周期。(梅森旋轉發生器曾在Mersenne Prime搜索中使用)
這兩個類都是模板類,需要通過參數指定隨機數的類型。
二、c++ random.value取值範圍
random類中的生成的隨機數取值範圍是在閉區間[0, max()]之間的整數,其中,max()是隨機數生成器可以生成的最大值。對於大多數情況下,實現中的最大值都是固定的。
三、c++ random頭文件
使用c++ random庫,需要引入頭文件random。
#include <random>
四、c++ random浮點數
如果需要生成外部取值範圍的隨機數,需要進行一定的格式化和類型轉換。有兩種方式:
1. (double)rand() / RAND_MAX 2. uniform_real_distribution函數
uniform_real_distribution有兩個參數,一個是均勻分布的起始值,一個時結束值。
std::default_random_engine rand_gen; std::uniform_real_distribution<double> value(-10.0 , 10.0); double a = value(rand_gen);
五、c++ random函數用法
以下是一個示常式序,演示了c++ random庫的基本用法:
#include <iostream> #include <random> using namespace std; int main() { std::default_random_engine rand_gen; std::uniform_int_distribution<> distrib(0, 10); for (int i = 0; i < 10; ++i) { cout << distrib(rand_gen) << " "; } cout << endl; return 0; }
六、c++ random函數限制範圍
c++ random的生成隨機數的範圍是可以通過指定相應的分布函數來實現,比如:
uniform_int_distribution 生成整數分布(下面的代碼生成1到10的整數分布);
uniform_real_distribution生成實數分布。
std::default_random_engine rand_gen; std::uniform_int_distribution<int> distrib(1, 10); for (int i = 0; i < 10; ++i) { cout << distrib(rand_gen) << " "; } cout << endl;
七、c++ random的用法
c++ random庫還包含了很多其他的隨機分布函數,例如binomial_distribution、normal_distribution等等,可以根據實際需要選擇對應的函數使用。
以下是使用normal_distribution生成正態分布的示例代碼:
std::default_random_engine rand_gen; std::normal_distribution<double> distrib(0.0 , 2.0); for (int i = 0; i < 10; ++i) { cout << distrib(rand_gen) << " "; } cout << endl;
八、c++ randomize函數
c++ randomize函數是一個初始化函數,用於獲取更長的隨機序列。使用方式如下示例:
std::random_device rd; std::default_random_engine rand_gen(rd()); std::uniform_int_distribution<int> distrib(1, 10); for (int i = 0; i < 10; ++i) { cout << distrib(rand_gen) << " "; } cout << endl;
九、c++ random不能使用/無法使用
需要注意,random庫裡面的所有函數,不要用在要求高精度隨機數的地方,因為這些函數都是偽隨機數而不是真正隨機數。在數據加密和密鑰生成時,更應該使用更強的隨機數生成器,例如sodium庫中的隨機數函數。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248193.html