C++ の rand() と srand()
rand()関数 C++ STL の組み込み関数であり、ヘッダー ファイルで定義されます。 。 rand() は、一連の乱数を生成するために使用されます。乱数は、この関数が呼び出されるたびに、関連性のない一連の数値を与えるアルゴリズムを使用して生成されます。 rand() 関数は、範囲 [0, RAND_MAX) の乱数を生成するために C++ で使用されます。
RAND_MAX: これは定数であり、そのデフォルト値は実装によって異なる場合がありますが、少なくとも 32767 であることが認められています。
rand()の構文
int rand (void);
rand()のパラメータ
- この関数はパラメータを受け取りません。
rand()の戻り値
- ランド() [0, RAND_MAX) の範囲の擬似乱数を返します。
たとえば、ループ内で rand() を使用して C++ で 5 つの乱数を生成すると、プログラムをコンパイルして実行するたびに、出力は同じ一連の数値になる必要があります。
rand()の例
C++
// C++ program to demonstrate> // the use of rand()> #include> #include> using> namespace> std;> > int> main()> {> > // This program will create some sequence of> > // random numbers on every program run> > for> (> int> i = 0; i <5; i++)> > cout < <> rand> () < <> ' '> ;> > > return> 0;> }> |
出力
1804289383 846930886 1681692777 1714636915 1957747793
rand() 関数の複雑さ
rand() 関数の時間計算量と空間計算量は次のとおりです。
- 時間計算量: O(1) 補助空間計算量: O(1)
注記: このプログラムは、プログラムを実行するたびに同じ一連の乱数を作成します。
以下のプログラムは、0 から N-1 の範囲から値を取得する rand() 関数の実装です。
C++
// C++ program to demonstrate the> // use of rand() to get value> // in a range of 0 to N-1> #include> #include> using> namespace> std;> > int> main()> {> > int> N = 100;> > // This program will create some sequence of random> > // numbers on every program run within range 0 to N-1> > for> (> int> i = 0; i <5; i++)> > cout < <> rand> () % N < <> ' '> ;> > > return> 0;> }> > // This code is contributed by Susobhan Akhuli> |
出力
83 86 77 15 93
以下のプログラムは、Upper_Bound から Lower_Bound までの値を取得する rand() 関数の実装です。
C++
// C++ program to demonstrate> // the use of rand() to get value> // in a range of lb to ub> #include> #include> using> namespace> std;> > int> main()> {> > int> lb = 20, ub = 100;> > // This program will create some sequence of random> > // numbers on every program run within range lb to ub> > for> (> int> i = 0; i <5; i++)> > cout < < (> rand> () % (ub - lb + 1)) + lb < <> ' '> ;> > > return> 0;> }> > // This code is contributed by Susobhan Akhuli> |
出力
66 90 38 99 88
スランド()
srand() 関数は C++ STL の組み込み関数であり、次のように定義されています。 ヘッダファイル。 srand() は、乱数発生器を初期化するために使用されます。 srand() 関数は、一連の擬似乱数整数を生成するための開始点を設定します。 srand() が呼び出されない場合、rand() シードはプログラムの開始時に srand(1) が呼び出されたかのように設定されます。シードに他の値を指定すると、ジェネレーターが異なる開始点に設定されます。
srand() の構文
void srand( unsigned seed ); OR int srand( unsigned int seed);
rand() によって使用される擬似乱数ジェネレーターに値をシードします。 シード。
パラメーター
- シード: rand() への連続呼び出しによって返される新しい擬似乱数シーケンスのシード
戻り値
- この関数は、擬似的に生成された乱数を返します。
注記: 擬似乱数ジェネレーターは、 rand() の呼び出し前とプログラムの開始時に 1 回だけシードする必要があります。擬似乱数の新しいバッチを生成するたびに、繰り返しシードまたは再シードを行うべきではありません。
標準的な方法では、呼び出しの結果を使用します。 srand(時間(0)) 種として。ただし、 time() は毎回異なる time_t 値を返すため、疑似乱数はプログラム呼び出しごとに異なります。
ランド() そして スランド() 比較
srand() の例
C++
// C++ program to generate random numbers> #include> #include> #include> using> namespace> std;> > int> main()> {> > // This program will create different sequence of> > // random numbers on every program run> > > // Use current time as seed for random generator> > srand> (> time> (0));> > > for> (> int> i = 0; i <4; i++)> > cout < <> rand> () < <> ' '> ;> > > return> 0;> }> |
出力
1326865685 1413967981 1967280748 919663823
時間計算量 : O(N)。N は生成される乱数の数です。
注記: このプログラムは、プログラムを実行するたびに異なる一連の乱数を作成します。
srand() と rand() は相互にどのように関連していますか?
srand() は、rand が乱数を生成するために使用するシードを設定します。 rand を最初に呼び出す前に srand を呼び出さなかった場合、srand(1) を呼び出してシードを 1 に設定したのと同じになります。
要するに、 srand() — rand() 関数のシードを設定する 。