第二节 · 铁索连环 · 变长元组tuple
C++11 引入了全新的随机数库 <random>,提供了高质量的随机数生成工具。
旧方法的问题
#include <cstdlib>
#include <ctime>
void oldWay()
{
srand(time(0)); // 设置种子
for (int i = 0; i < 5; ++i)
{
cout << rand() % 100 << " "; // 0-99
}
// 问题:
// 1. rand() 的随机质量不高
// 2. 取模会导致分布不均匀
// 3. 不同平台的 RAND_MAX 不同
}现代随机数生成
常用随机数引擎
引擎
说明
mt19937
32 位 Mersenne Twister(最常用)
mt19937_64
64 位 Mersenne Twister
minstd_rand
线性同余引擎
default_random_engine
编译器默认选择
random_device
硬件随机数(可能较慢)
整数分布
浮点分布
打乱序列
随机选择
加权随机
生成随机字符串
蒙特卡洛方法估算圆周率
习题
实现一个模拟掷骰子的程序,统计各点数出现的频率。
生成服从正态分布的一组数据并计算均值和标准差。
实现一个简单的彩票号码生成器。
Last updated