深入C++11随机数生成:从基础到工程实践
1. 现代C++随机数生成基础
在C++11之前,开发者通常使用C标准库中的rand()和srand()函数生成随机数。这种方法存在几个明显缺陷:
- 随机性质量不高,周期较短
- 分布不均匀,容易出现模偏差
- 缺乏线程安全性
- 难以生成特定分布的随机数
C++11引入了全新的随机数库,将随机数生成分为两个独立部分:
#include <random>
// 随机数引擎(生成原始随机序列)
std::random_device rd; // 真随机数引擎
std::mt19937 gen(rd()); // 伪随机数引擎
// 随机数分布(将原始序列转换为特定分布)
std::uniform_int_distribution<> dis(1, 6);
关键组件对比表:
| 组件类型 | C风格(rand) | C++11风格 | 优势 |
|---|---|---|---|
| 随机源 | time(nullptr) | random_device | 真随机种子 |
| 引擎 | 线性同余 | mt19937等 | 更长周期、更好统计特性 |
| 分布 | 手动取模 | 内置多种分布 | 精确控制分布特性 |


312

被折叠的 条评论
为什么被折叠?



