名稱空間
變體
操作

C++ 命名需求: RandomNumberEngine (自 C++11 起)

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
隨機數
RandomNumberEngine(隨機數引擎)
(C++11)
併發
(C++11)
Ranges
多維檢視
其他

 

隨機數引擎是一個函式物件,它返回無符號整數值,理想情況下,結果範圍內每個值的機率都相等。

任何隨機數引擎也是一個 UniformRandomBitGenerator,因此可以將其插入任何 隨機數分佈 中以獲取隨機數(形式上,隨機變數)。

[編輯] 要求

一個型別滿足 RandomNumberEngine,如果它滿足 UniformRandomBitGenerator 並且,給定以下型別和值,下表中的語義和複雜度要求得到滿足:

型別 定義
E 一個 RandomNumberEngine 型別
T E::result_type
定義
e 型別 E 的一個值
v 型別 E 的一個左值
x, y 型別 E 的值(可能帶有 const 限定符)
s 型別 T 的一個值
q 一個 SeedSequence 左值
z 型別 unsigned long long 的一個值
os 型別為 std::basic_ostream 特化形式的左值
is 型別為 std::basic_istream 特化形式的左值
n E 狀態的 大小
TA E轉換演算法
GA E生成演算法
表示式 返回型別 語義 複雜度
E() 不適用 建立一個引擎,其初始狀態與所有其他型別為 E 的預設構造引擎相同。 O(n)
E(x) 建立一個與 x 比較相等的引擎。 O(n)
E(s) 建立一個引擎,其初始狀態由 s 確定。 O(n)
E(q) 建立一個引擎,其初始狀態由一次 q.generate 呼叫確定。 與在長度為 n 的序列上呼叫 q.generate 的複雜度相同
e.seed() void 後置條件:e == E() E() 相同
e.seed(s) void 後置條件:e == E(s) E(s) 相同
e.seed(q) void 後置條件:e == E(q) E(q) 相同
e() T e 的狀態從 ei 前進到 ei+1(即 TA(ei)),並返回 GA(ei) 均攤常量時間
e.discard(z) void 透過任何等同於連續呼叫 ze() 的方式,將 e 的狀態從 ei 前進到 ei+z 不比連續呼叫 ze() 的複雜度更差
x == y bool 對於所有正整數 i,如果連續 i 次呼叫 x()y() 返回相同的值,則返回 true。否則返回 false O(n)
x != y bool !(x == y) O(n)
os << x decltype(os)&  將 fmtflags 設定為 std::ios_base::dec | std::ios_base::left,填充字元設定為空格字元,將 x 當前狀態的文字表示寫入 os

後置條件:os 的 fmtflags 和填充字元與之前相同。

O(n)
is >> v decltype(is)& 將 fmtflags 設定為 std::ios_base::dec,從 is 讀取 v 當前狀態的文字表示。如果遇到錯誤輸入,確保 v 的狀態未因操作而改變,並呼叫 is.setstate(std::ios_base::failbit)(這可能會丟擲 std::ios_base::failure)。

前置條件:is 提供了一個文字表示,該表示之前使用滿足以下所有條件的輸出流 pr 寫入:

  • is.getloc() == pr.getloc()true
  • std::is_same<decltype(is)::char_type,
                 decltype(pr)::char_type>::value
    true
  • std::is_same<decltype(is)::traits_type,
                 decltype(pr)::traits_type>::value
    true

後置條件:is 的 fmtflags 與之前相同。

O(n)

[編輯] 標準庫

以下標準庫設施滿足 RandomNumberEngine

實現 線性同餘 演算法
(類模板) [編輯]
實現 Mersenne twister 演算法
(類模板) [編輯]
實現帶借位減法 (滯後斐波那契) 演算法
(類模板) [編輯]
基於計數器的可並行化生成器
(類模板) [編輯]
丟棄隨機數引擎的一些輸出
(類模板) [編輯]
將隨機數引擎的輸出打包成指定位元數的塊
(類模板) [編輯]
以不同順序提供隨機數引擎的輸出
(類模板) [編輯]

以下標準庫設施滿足 UniformRandomBitGenerator 但不滿足 RandomNumberEngine

使用硬體熵源的非確定性隨機數生成器
(類) [編輯]