random_device 類別
從外部裝置產生隨機序列。
語法
class random_device {
public:
typedef unsigned int result_type;
// constructor
explicit random_device(const std::string& token = "");
// properties
static result_type min();
static result_type max();
double entropy() const;
// generate
result_type operator()();
// no-copy functions
random_device(const random_device&) = delete;
void operator=(const random_device&) = delete;
};
成員
random_device
熵
random_device::operator()
備註
此類別會描述亂數的來源,且允許 (但不一定需要) 是不具決定性,或是由 ISO C++ 標準以密碼編譯保護。 在 Visual Studio 實作中,產生的值是不具決定性且以密碼編譯保護,但執行速度比從引擎及引擎配接器 (例如 mersenne_twister_engine,對大多數應用程式而言是高品質且快速的引擎選擇) 建立的產生器更慢。
random_device
結果會統一分佈在接近的範圍 [ 0, 2
32) 中。
random_device
不保證會產生未封鎖的呼叫。
一般而言,會使用 random_device
植入使用引擎或引擎配接器建立的其他產生器。 如需詳細資訊,請參閱 <隨機>。
範例
下列程式碼示範此類別的基本功能及範例結果。 因為 random_device
的不具決定性特質,顯示在「輸出」區段中的隨機值不會與您的結果相符。 這是正常且符合預期的。
// random_device_engine.cpp
// cl.exe /W4 /nologo /EHsc /MTd
#include <random>
#include <iostream>
using namespace std;
int main()
{
random_device gen;
cout << "entropy == " << gen.entropy() << endl;
cout << "min == " << gen.min() << endl;
cout << "max == " << gen.max() << endl;
cout << "a random value == " << gen() << endl;
cout << "a random value == " << gen() << endl;
cout << "a random value == " << gen() << endl;
}
entropy == 32
min == 0
max == 4294967295
a random value == 2378414971
a random value == 3633694716
a random value == 213725214
這是針對此產生器的最簡化範例,不代表一般使用情況。 如需更代表性的程式代碼範例,請參閱 <隨機>。
需求
標頭:<random>
命名空間:std
random_device::random_device
建構產生器。
random_device(const std::string& = "");
備註
建構函式會視需要初始化產生器,忽略字串參數。 若無法初始化 random_device
,會擲出衍生自 exception 之實作定義類型的值。
random_device::entropy
評估來源的隨機性。
double entropy() const noexcept;
備註
成員函式會傳回來源隨機性的評估 (測量單位為位元)。
random_device::operator()
傳回隨機值。
result_type operator()();
備註
傳回統一分佈在封閉間隔 [min, max
] 中的值,而此間隔是透過成員函式 min()
和 max()
所決定。 如果無法取得亂數,會擲回衍生自 exception 之實作定義類型的值。