第二节 · 铁索连环 · 变长元组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