跳到主要内容
版本:Next

random

std::random 是 C++11 引入的真随机数库,替代了 C 风格 rand()。它把随机数生成拆成引擎(生成原始随机位)和分布(映射到目标范围),两者可自由组合。

头文件与基本用法

#include <random>
#include <iostream>

int main() {
std::random_device rd; // 真随机熵源(种子)
std::mt19937 gen(rd()); // 梅森旋转引擎
std::uniform_int_distribution<int> dist(1, 6); // [1, 6] 均匀分布

for (int i = 0; i < 10; ++i) {
std::cout << dist(gen) << ' ';
}
// 输出 10 个 1~6 之间的随机整数

return 0;
}

核心组件

组件作用示例
熵源提供不可预测的种子std::random_device
引擎生成随机位序列std::mt19937, std::default_random_engine
分布将随机位映射为目标分布uniform_int_distribution, normal_distribution

常用分布

分布用途
uniform_int_distribution整数均匀分布
uniform_real_distribution浮点均匀分布
normal_distribution正态分布(高斯)
bernoulli_distribution伯努利(true/false)

使用注意

  1. 不要再使用 rand() + srand(),随机质量差且线程不安全。
  2. 引擎的构造开销不小,避免每次调用都重新创建。
  3. random_device 在某些平台可能退化为伪随机,关键安全场景需验证。
  4. 并发使用时,每个线程应有独立的引擎实例或加锁保护。

小结

<random> 用"引擎 + 分布"的分离设计提供了高质量随机数。日常最常用的是 random_device 作种子 + mt19937 作引擎 + uniform_*_distribution 作分布。