c++ 11 random ライブラリの簡単な使い方
c++11は、従来のものと比べて全く新しい言語となり、通常の開発を効率的に行うための新しい標準ライブラリーが多数追加されました。
randomライブラリの主な構成要素は、乱数エンジンと乱数分布エンジンです。
1. 乱数エンジンクラスは、ある種の乱数を一様な確率で発生させる単体の乱数発生器ですが、乱数の範囲や確率などの情報を指定することができません。このため、"生乱数生成器"とも呼ばれ、生成する乱数の範囲を指定できないため、通常は単独で使用されることはありません。
<スパン 2. 乱数分布クラスは、実行には乱数エンジンクラスのサポートが必要ですが、乱数エンジンを使って、ある間隔の乱数やある分布確率の乱数など、ユーザーのニーズに合った乱数を生成することができるクラスです。
<スパン
一般的に使用される乱数クラスは、主に以下の4種類です。
<ブロッククオート
<スパン
default_random_engine
: ランダムな非負の数(単独での使用は推奨されません)。
<スパン
<スパン
uniform_int_distribution
<スパン
: 指定された範囲内の非負の乱数です。
<スパン
<スパン
<スパン
uniform_real_distribution
<スパン
: 指定された範囲内のランダムな実数です。
bernoulli_distribution
<スパン
: 指定された確率で、ランダムなブール値を返します。
ここでは、4つのクラスの基本的な使い方を紹介します。
default_random_engine
は、乱数エンジンクラスです。乱数を返す呼び出し演算子を定義しています。
unsigned
値の種類
<スパン
#include <iostream>
#include <random>
using namespace std;
int main( ){
default_random_engine e;
for(int i=0; i<10; ++i)
cout<<e( )<<endl;
return 0;
}
一様int分布 は乱数分布クラスで、テンプレートパラメータに生成する乱数の型(ただし、int, unsigned, short, unsigned short, long, unsigned long, long long, unsigned long long のいずれか一つのみ)を指定します。コンストラクタには、乱数の分布範囲(閉区間)を示す2つの値を指定します。
#include <iostream>
#include <random>
using namespace std;
int main( ){
default_random_engine e;
uniform_int_distribution<unsigned> u(0, 9);
for(int i=0; i<10; ++i)
cout<<u(e)<<endl;
return 0;
}
uniform_real_distribution
#include <iostream>
#include <random>
using namespace std;
int main( ){
default_random_engine e;
uniform_real_distribution<double> u(0.0, 1.0);
for(int i=0; i<10; ++i)
cout<<u(e)<<endl;
return 0;
}
bernoulli_distribution
は乱数分布クラスで、乱数の型を示すパラメータを持つテンプレートクラスでもあります(オプションの型は float、double、long doubleです)。また、コンストラクタは最大値と最小値を引数として受け取ります。
#include <iostream>
#include <random>
using namespace std;
int main( ){
default_random_engine e;
bernoulli_distribution u;
for(int i=0; i<10; ++i)
cout<<u(e)<<endl;
return 0;
}
bernoulli_distribution
は分布クラスですが、テンプレートクラスではありません。コンストラクタの引数はひとつだけで、クラスが真を返す確率を表します。デフォルトは 0.5 で、これは真と偽を返す確率が等しいことを意味します。
#include <iostream>
#include <random>
using namespace std;
int main( ){
default_random_engine e;
bernoulli_distribution u;
for(int i=0; i<10; ++i)
cout<<u(e)<<endl;
return 0;
}
以上が、randomライブラリの基本的な使い方です。より詳細な内容については、http://www.cplusplus.com/reference/random/ を参照してください。
<スパン
関連
-
解決策:エラー:'cout'は型名ではありません。
-
c++ エラー: 'map' は型名ではありません。
-
戦闘機ゲームのC++実装(ソースコード)
-
34:5: エラー: 制御が非ボイド関数の終わりに達する可能性がある [-Werror,-Wreturn-type] エラー解析
-
C++ - 文字列クラス超詳細紹介
-
const char*' から `char*' への変換が無効な場合の対処法
-
ISO C++ではポインタと整数の比較は禁止されています[-fpermissive]。
-
C++: エラー C2228: '.str' の左側にはクラス/構造体/結合が必要
-
警告: この関数では 'p' が初期化されていない状態で使用されることがあります。
-
munmap_chunk():不正なポインタとSegmentation faultのバグを解決。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
C++ std::string は NULL で初期化できない、基本的な使い方
-
c++11の機能を含むcmakeの書き方 (-std=c++11 cmakeList.txtに書き込む方法)
-
エラー: "***"の前にイニシャライザーがあります。
-
C++のコンパイルエラーで修飾子が破棄される [-fpermissive] 。
-
gccコンパイルエラーの一覧
-
C++: エラー C2280: 削除された関数を参照しようとしています。
-
C++ ダイナミックオープンスペース
-
C++テンプレートテンプレート使用法まとめ
-
c/c++の "undefined reference to "の解決法
-
c++ベクトル使用集