C++11新特性之隨機數(shù)庫(Random?Number?Library)詳解
從前的隨機數(shù)
C++11之前,無論是C,還是C++都使用相同方式的來生成隨機數(shù),代碼大致如下:

由于rand()產(chǎn)生的是偽隨機數(shù),所以需要為rand函數(shù)提供種子。種子不同產(chǎn)生的隨機數(shù)序列也不同。通常的做法是調(diào)用srand(time(0)),由于time返回的是系統(tǒng)時間,每秒都會不同,所以產(chǎn)生的隨機數(shù)相同幾率就會變得很小。
這種方式有一個難點,就是不容易控制輸出結(jié)果的范圍。特別是希望不是均勻分布的時候就更難。
隨機數(shù)庫(Random Number Library)
C++11中提供了隨機數(shù)庫,包括隨機數(shù)引擎類(random-number engines)和隨機數(shù)分布類(random-number distribution)。二者一般配合使用。
隨機數(shù)引擎
標準庫提供了多重隨機數(shù)引擎,這里以default_random_engine類為例進行說明。

到這里為止,和之前的方式?jīng)]有什么本質(zhì)區(qū)別,只是形式不同。別忙,接著往下看。
隨機數(shù)分布類
C++11通過隨機數(shù)分布類來控制隨機數(shù)引擎生成的隨機數(shù)的分布情況。
生成平均分布的整數(shù)

代碼中使用uniform_int_distribution<int>來控制隨機數(shù)引擎生成0到10之間的整數(shù)。
生成平均分布的實數(shù)

代碼中使用uniform_real_distribution來控制隨機數(shù)引擎生成0到10之間的實數(shù)。
生成正態(tài)分布的實數(shù)

代碼中使用normal_distribution<>來控制隨機數(shù)引擎生成均值為2,標準差為0.25的正態(tài)分布數(shù)據(jù)。
生成概率可控的布爾值

代碼中使用bernoulli_distribution來控制隨機數(shù)引擎生成布爾值隨機數(shù),其中1的概率為0.3。
輸出結(jié)果

補充:真正的隨機數(shù)
C++11還提供了一個random_device隨機數(shù)類。它并不是由某一個數(shù)學算法得到的隨機序列,而是通過讀取文件,讀什么文件看具體的實現(xiàn)(Linux可以通過讀取/dev/random文件來獲取)。文件的內(nèi)容是隨機的,因為文件內(nèi)容是計算機系統(tǒng)的熵(熵指的是一個系統(tǒng)的混亂程度)。也是當前系統(tǒng)的環(huán)境噪聲,系統(tǒng)噪音可以通過很多參數(shù)來評估,如內(nèi)存的使用,文件的使用量,不同類型的進程數(shù)量等等。Linux的熵來自鍵盤計時、鼠標移動等。
不過gcc好像并沒有很好地實現(xiàn)這個類,我手里的Mingw4.9.0就不隨機,每次運行都得到同樣的序列。
總結(jié)
如果看一下C++11標準庫,你會發(fā)現(xiàn)還有很多種隨機數(shù)引擎類和隨機數(shù)分布類。需要的時候去學吧。
到此這篇關于C++11新特性之隨機數(shù)庫(Random Number Library)的文章就介紹到這了,更多相關C++11隨機數(shù)庫內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
C++ Opencv imfill孔洞填充函數(shù)的實現(xiàn)思路與代碼
在Matlab下,使用imfill可以很容易的完成孔洞填充操作,下面這篇文章主要給大家介紹了關于C++ Opencv imfill孔洞填充函數(shù)的實現(xiàn)思路與代碼,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下2021-09-09
C語言枚舉(enum)和聯(lián)合(union)實例分享
在本篇文章里小編給大家整理了關于C語言枚舉(enum)和聯(lián)合(union)實例內(nèi)容,需要的朋友們可以學習下。2020-03-03
Qt動態(tài)庫調(diào)用宿主進程中的對象方法純虛函數(shù)使用
這篇文章主要為大家介紹了Qt動態(tài)庫調(diào)用宿主進程中的對象方法純虛函數(shù)使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-08-08
探討:C++實現(xiàn)鏈式二叉樹(用非遞歸方式先序,中序,后序遍歷二叉樹)
本篇文章是對用C++實現(xiàn)鏈式二叉樹(用非遞歸方式先序,中序,后序遍歷二叉樹)的方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05

