この投稿では、C++で指定された範囲のランダムな数値を生成する方法について説明します。

1.使用する std::uniform_int_distribution

最新のC++で2つの値(両端を含む)の間にランダムな数値を生成する簡単なソリューションは、 std::uniform_int_distribution、指定された閉区間に均一に分散されたランダムな整数値を生成します。

次のソリューションは、指定された閉区間で高品質の整数ランダム数を生成します。 std::uniform_int_distribution。それは使用しています std::random_device 標準のmersenne_twister_engineのシードを取得します std::mt19937、メルセンヌツイスターアルゴリズムに基づいています。

ダウンロード  コードを実行する

 
上記のソリューションは短くエレガントですが、C++11準拠のコンパイラでのみ使用できます。 C++ 11より前は、BoostライブラリでMersenneTwisterを使用できます。

コードをダウンロード

 
ヘッダーには他にもいくつかの事前定義された乱数ジェネレーターがあります <random>、記載されているとおり ここ。次のソリューションは std::default_random_engine 乱数ジェネレータ std::uniform_int_distribution.

ダウンロード  コードを実行する

 
シードを検討してください std::default_random_engine 現在の時刻の乱数ジェネレータ。

ダウンロード  コードを実行する

2.使用する rand() 関数

指定された範囲のランダムな数値を生成するもう1つの一般的ですが、あまり好ましくない方法は、 rand() 関数。ヘッダーで定義されています <cstdlib> 0から0までのランダムな値を返します RAND_MAX (両方を含む)。閉範囲でランダムな値を生成するには [low, high]、式を使用できます low + rand() % (high - low + 1)、播種後 rand() ランダムな値(たとえば現在の時刻)で機能します。

ダウンロード  コードを実行する

3.使用する std::experimental::randint

実験的ですが、 std::experimental::randint 指定された閉区間でランダムな整数を生成します。それはで定義されています <experimental/random> ヘッダ。

ダウンロード  コードを実行する

これで、C++で指定された範囲の乱数を生成できます。