srand
関数と time_t
型を使用して、乱数シードを初期化することができます。
以下に、乱数生成の手法とそれぞれのコード例をいくつか紹介します。
- 現在の時刻をシードとして使用する方法:
#include <iostream>
#include <cstdlib>
#include <ctime>
int main() {
std::srand(static_cast<unsigned>(std::time(nullptr)));
for (int i = 0; i < 10; ++i) {
int randomNum = std::rand();
std::cout << randomNum << std::endl;
}
return 0;
}
この例では、std::time
関数を使用して現在の時刻を取得し、それを srand
関数のシードとして使用しています。これにより、プログラムを実行するたびに異なる乱数列が生成されます。
- ユーザーが指定したシードを使用する方法:
#include <iostream>
#include <cstdlib>
int main() {
unsigned int seed = 1234; // ユーザーが指定するシード
std::srand(seed);
for (int i = 0; i < 10; ++i) {
int randomNum = std::rand();
std::cout << randomNum << std::endl;
}
return 0;
}
この例では、ユーザーが乱数のシードを指定できるようになっています。std::srand
関数にユーザーが指定したシードを渡すことで、同じシードを使用した場合には同じ乱数列が生成されます。
- 範囲を指定して整数の乱数を生成する方法:
#include <iostream>
#include <cstdlib>
#include <ctime>
int getRandomNumber(int min, int max) {
return min + std::rand() % (max - min + 1);
}
int main() {
std::srand(static_cast<unsigned>(std::time(nullptr)));
for (int i = 0; i < 10; ++i) {
int randomNum = getRandomNumber(1, 100);
std::cout << randomNum << std::endl;
}
return 0;
}
この例では、指定した範囲(1から100)の整数を生成する関数 getRandomNumber
を定義しています。std::rand
関数の結果を範囲内に収めるために、余りの計算を行っています。
以上のように、C++では乱数生成を行うために srand
関数と rand
関数を組み合わせて使用します。適切なシードの設定や範囲指定により、さまざまな乱数の生成が可能です。