0Pricing
C++ Academy · 课时

使用 random 头文件生成随机数

使用现代引擎和分布生成高质量的随机数

使用 random 头文件生成随机数 是 CoddyKit 上的免费 C++ Academy 课时。 这是第 3 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 C++ Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 C++ Academy 课程共包含 4 节课。

为什么不使用 rand()?

传统的 C std::rand() 使用全局状态,统计质量较差,而且不是线程安全的。现代 C++ 在 <random> 中提供了好得多的工具。

三部分配方

现代 C++ 中的随机数由三个部分组成:

  • 一个种子来源(真正的熵)
  • 一个生成器引擎(确定性状态)
  • 一个分布(调整输出)

使用 random_device 生成种子

std::random_device 从 OS 中获取真实熵,但这可能很慢。请使用它一次,为快速引擎生成种子。

#include <random>
std::random_device rd;
std::mt19937 engine(rd());

mt19937 引擎

std::mt19937(梅森旋转算法)是一种快速的伪随机引擎,具有出色的统计质量。它是大多数应用的默认选择。

均匀整数分布

在闭区间内生成服从均匀分布的整数。

std::uniform_int_distribution<int> dice(1, 6);
int roll = dice(engine);

均匀实数分布

用于生成半开区间 [a, b) 内的浮点数。

std::uniform_real_distribution<double> dist(0.0, 1.0);
double x = dist(engine);

正态(高斯)分布

用于生成钟形曲线分布的随机数,常见于模拟和机器学习。

std::normal_distribution<double> norm(0.0, 1.0); // mean 0, stddev 1
double x = norm(engine);

其他分布

该库还包含许多其他分布:bernoulli_distribution、poisson_distribution、exponential_distribution、discrete_distribution 等。

可复现的随机性

进行测试时,请使用固定值作为种子,以便每次运行都获得相同的序列。

std::mt19937 engine(42);
// Same output every time you run the program

随机打乱

使用 std::shuffle 打乱容器,该函数可以接受任意引擎。

#include <algorithm>
std::vector<int> v = {1,2,3,4,5};
std::shuffle(v.begin(), v.end(), engine);

陷阱:在循环中重新生成种子

不要为每个随机数都创建新的 random_device 或引擎。请构造一个引擎,并在多次调用之间重复使用它。

快速检查

在现代 C++ 中,为伪随机引擎生成种子的最安全方式是什么?

回顾

现代 C++ 使用 random_device 生成种子,使用 mt19937 作为引擎,并使用 uniform_int_distribution 等分布来调整输出。请重复使用引擎,不要为每次调用都创建一个新引擎。

常见问题解答

「使用 random 头文件生成随机数」课时是免费的吗?

是的 — 「使用 random 头文件生成随机数」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 C++ Academy 课程的其余内容,请升级到 CoddyKit PRO。 C++ Academy 课程共包含 4 节课。

「使用 random 头文件生成随机数」这节课中我会学到什么?

使用现代引擎和分布生成高质量的随机数 你通过在浏览器中直接运行的动手代码来练习 C++ Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 C++ Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 C++ Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 3 节课,共 4 节。

「使用 random 头文件生成随机数」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 C++ Academy 课中编写并运行代码吗?

能。每节 C++ Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 整数类型与浮点类型
  2. cmath 头文件:pow、sqrt、abs、round
  3. 使用 random 头文件生成随机数
  4. 数值限制与溢出行为
← 返回 C++ Academy