C++ 亂數生成器和亂數引擎及其兩者間關係解析

2020-07-16 10:04:28
ST L中有 3 個亂數引擎的類別範本。它們中的每一個都實現了用來生成亂數序列的著名且高效的演算法,但它們都有不同的優缺點。

這裡的 3 個模板是 STL 提供的所有 10 個標準的亂數生成器類型別的基礎。除了預設的 default_random_engine 生成器型別(這是實現的定義)之外,還有 9 個更進一步的生成器類型別,可以自定義引擎來實現生成隨機序列的已知的可靠演算法。

有 3 個亂數引擎介面卡可以自定義從一個引擎得到的序列。它們中的每一個都有一個指定運用哪個引擎的模板引數。這 3 個引擎介面卡模板是:
  • independent_bits_engine 介面卡模板會將引擎生成的值修改為指定的位元個數。
  • discard_block_engine 介面卡模板會將引擎生成的值修改為丟棄給定長度的值序列中的一些元素。
  • shuffle_order_engine 介面卡模板會將引擎生成的值返回到不同的序列中。通過儲存從引擎得到的給定長度的值序列來做到這些,然後在隨機序列中返回它們。

生成器類既可以直接用一套指定的模板引數值自定義一個引擎模板,也可以用一個亂數引擎介面卡來自定義另一個生成器。引擎產生生成器的方式如圖 1 所示。


圖 1 亂數生成器和亂數引擎的關係(點此檢視高清大圖)