5

C++ での rand() 関数の使用に関するクエリが 2 つあります。

  1. rand() 関数はどこで定義されていますか? ループ内に単純なプログラムを 作成し、 ..cout<<rand()<<endl;以外のヘッダー ファイルを含めませんでした。これはどのように機能しましたか? <iostream>いくつかのサイトで出くわした参照例では、 を含める必要があると <stdlib.h>言う人もいれば、<time.h>..私のプログラムがどのように機能したのか疑問に思っている..何かアイデアはありますか?
  2. 「rand()」を使用する前に聞いたことがあります。srand にシードを与えて初期化する必要があり、通常、シードは現在の UNIX 時間です - > srand(time(NULL)).. cout<<rand()<<endl;while ループとそれは乱数を表示していました..だから質問:srand(time(NULL))必須ではないので、ランダム性を改善するために使用されますか? そうでない場合、それを使用するポイントは何ですか。

あなたの助けに感謝!

ありがとう!

4

7 に答える 7

3

<cstdlib>ヘッダーで宣言されています。標準ライブラリ ヘッダー (<iostream>あなたの例では)には他の標準ヘッダー含まれている場合がありますが、実装固有であるため、それに依存しないでください。明示的に必要なヘッダーを含めます。

プログラムが実行するたびに同じ「ランダム」シーケンスを生成するという事実に満足しない限り、乱数ジェネレーターのシードは必須です:)

于 2013-08-25T11:51:08.807 に答える
1

rand()関数は stdlib.h で宣言されているため、プログラムで必要です#include <stdlib.h>。ランダムシードを初期化するために使用される関数がそこで宣言されて#include time.hいるため、必要になる場合もありますtime()

srand (time(NULL));

rand()プログラムを実行するたびに(異なる)疑似乱数シーケンスを生成する場合は、シードの初期化を行う必要があります

http://en.cppreference.com/w/cpp/numeric/random/rand

于 2013-08-25T11:53:42.343 に答える
0
  1. そのインクルードcstdlib

    この標準ヘッダーは、ユーザーがインクルードした可能性がありますiostream

  2. プログラムを再実行し、前回の実行で生成された数値に共通するものに気づきましたか。

    はい、srand必要なものです。乱数ジェネレーターに現在の時刻をシードします。

于 2013-08-25T11:54:08.823 に答える
0

マニュアル ページ ( http://linux.die.net/man/3/rand ) を読むと、1 の値が自動的にシードされることがわかります。を含める必要がない理由についてはstdlib、の腸に含める必要がありますiostream

于 2013-08-25T11:54:22.723 に答える