C++ 11随机数
在 C++ 11 标准中,随机数库定义在头文件 random
中,主要有两个类:
- 随机数引擎类(random-number engines)
- 随机数分布类(random-number distribution)
其中,一个引擎类可以生成 unsigned
随机数列,一个分布使用一个引擎类生成指定类型的,在给定范围内的,服从指定概率分布的随机数。
随机数引擎是函数对象类,’定义了一个调用运算符,该运算符不接受参数并返回一个随机的 unsigned
整数。我们可以通过调用一个随机数引擎对象来生成原始随机数。
类似引擎类型,分布类型也是函数对象类。分布类型定义了一个调用运算符,它接受一个随机数引擎作为参数。分布对象使用它的引擎参数生成随机数,并将其映射到指定的分布。
传递给分布对象的是引擎对象本身,也就是 u(e)
,如果我们将调用写为 u(e())
,含义就变为将 e
生成的下一个值传递给 u
,这会导致一个编译错误。我们传递的是引擎本身,而不是他生成的下一个值,原因是某些分布可能需要调用引擎多次才能得到一个值。
一个给定的随机数发生器已知会生成相同的随机数序列。一个函数如果定义了局部的随机数发生器,应该将其(包括引擎和分布对象)定义为 static
的。否则,每次调用函数都会生成相同的序列。
随机数发生器会生成相同的随机数序列这一特性在调试中很有用。但是,一旦我们的程序调试完毕,我们通常希望每次运行程序都会生成不同的随机结果,可以通过提供一个种子(seed)来达到这个目的。种子就是一个数值,殷勤可以利用它从序列中一个新位置重新开始生成随机数。
c++的随机数使用比较麻烦,通常使用传统c的随机数,两个函数srand()和rand(),用于产生随机数,srand()用于生成种子。需要加头文件#include <stdlib.h>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探