C++如何生成随机数?
时间: 2024-10-01 13:01:41 浏览: 32
在C++中,你可以使用 `<random>` 模块来生成各种类型的随机数。以下是一些常用的随机数生成方法:
1. **全局随机数引擎** (`std::default_random_engine`): 这是最基础的随机数生成器,通常基于当前时间(如果你没有提供种子)。
```cpp
#include <iostream>
#include <random>
int main() {
std::default_random_engine generator; // 使用默认种子
std::uniform_int_distribution<int> distribution(1, 100); // 生成1到100之间的整数
int random_number = distribution(generator);
std::cout << "Random number: " << random_number << std::endl;
return 0;
}
```
2. **线程安全随机数生成器** (`std::mt19937`): `mersenne_twister_engine` 提供了一个高质量、线程安全的选择。
```cpp
#include <thread>
#include <random>
int main() {
std::mt19937 engine(std::chrono::system_clock::now().time_since_epoch().count()); // 使用系统时钟作为种子
// ...
}
```
3. **定制分布** (`std::uniform_real_distribution`, `std::normal_distribution`, etc.) : 可以根据需求选择不同类型的分布,如生成浮点数或正态分布的数值。
```cpp
#include <random>
#include <cmath>
double generate_gaussian() {
std::normal_distribution<double> dist(0.0, 1.0); // 正态分布,均值为0,标准差为1
return dist(engine);
}
int main() {
double gaussian_random = generate_gaussian();
std::cout << "Gaussian random: " << gaussian_random << std::endl;
return 0;
}
```
记得在使用前包含 `<random>` 头文件,并确保已经包含了必要的库(如 `<ctime>` 或 `<chrono>`)。如果你想让程序具有更好的可预测性和重复性,可以在创建引擎时提供一个固定的种子。
阅读全文