1. ホーム
  2. C++

c++ 11 random ライブラリの簡単な使い方

2022-02-14 17:05:26

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/ を参照してください。


<スパン