namespace std {
template <class IntType = int>
class uniform_int_distribution;
}
概要
uniform_int_distribution
は、指定された範囲の値が等確率で発生するよう離散分布するクラスである。
このクラスは、離散一様分布(Discrete Uniform Distribution)の整数に特化したバージョンである。実数が必要な場合は、uniform_real_distribution
クラスを使用する。
一様分布の整数は、以下のような用途で使用できる:
- サイコロを振る
- カードデッキから1枚を選ぶ
テンプレートパラメータは、以下を意味する:
IntType
: 生成する整数の型。
メンバ関数
構築・リセット
名前 | 説明 | 対応バージョン |
---|---|---|
(constructor) |
コンストラクタ | C++11 |
~uniform_int_distribution() = default; |
デストラクタ | C++11 |
reset |
状態をリセットする | C++11 |
生成
名前 | 説明 | 対応バージョン |
---|---|---|
operator() |
乱数を生成する | C++11 |
プロパティ
名前 | 説明 | 対応バージョン |
---|---|---|
a |
生成し得る値の下限を取得する | C++11 |
b |
生成し得る値の上限を取得する | C++11 |
param |
分布のパラメータを取得/設定する | C++11 |
min |
生成し得る値の下限を取得する | C++11 |
max |
生成し得る値の上限を取得する | C++11 |
メンバ型
型 | 説明 | 対応バージョン |
---|---|---|
result_type |
乱数生成結果の整数型 IntType 。符号なし整数型でもよい。 |
C++11 |
param_type |
分布パラメータの型。未規定。 | C++11 |
非メンバ関数
名前 | 説明 | 対応バージョン |
---|---|---|
operator== |
等値比較 | C++11 |
operator!= |
非等値比較 | C++11 |
operator<< |
ストリームへの出力 | C++11 |
operator>> |
ストリームからの入力 | C++11 |
例
#include <random>
#include <fstream>
int main()
{
std::random_device seed_gen;
std::default_random_engine engine(seed_gen());
// 0以上9以下の値を等確率で発生させる
std::uniform_int_distribution<> dist(0, 9);
std::ofstream result_file("uniform_int_distribution.tsv");
for (std::size_t n = 0; n < 1000; ++n) {
// 一様整数分布で乱数を生成する
int result = dist(engine);
result_file << result << "\t\n";
}
}
xxxxxxxxxx
#include <random>
#include <fstream>
int main()
{
std::random_device seed_gen;
std::default_random_engine engine(seed_gen());
// 0以上9以下の値を等確率で発生させる
std::uniform_int_distribution<> dist(0, 9);
std::ofstream result_file("uniform_int_distribution.tsv");
for (std::size_t n = 0; n < 1000; ++n) {
// 一様整数分布で乱数を生成する
int result = dist(engine);
result_file << result << "\t\n";
}
}
出力
このプログラムによってある時に得られた結果(uniform_int_distribution.tsv)を図示する。
1,000個程度のデータのため、ある程度は偏りがあるが、誤差の範囲でほぼ等確率で0から9までの値が生成されていることがわかる。
バージョン
言語
- C++11
処理系
- Clang: ??
- GCC: 4.7.2 ✅
- ICC: ??
- Visual C++: ??