21xrx.com
2024-11-05 20:46:40 Tuesday
登录
文章检索 我的文章 写文章
C++11的random库介绍
2023-07-08 16:12:50 深夜i     --     --
C++11 random库 介绍

C++11的random库是用于生成随机数的标准库,提供了比之前版本更加灵活和功能更强大的随机数生成器。随机数在游戏开发、密码学、模拟和统计学等领域非常有用,而C++11的random库则使得生成高质量随机数的任务更加容易。

C++11的random库主要由两个组件组成:随机数引擎(random engine)和分布(distribution)。

随机数引擎是用于生成随机数序列的核心组件,C++11的random库提供了多个标准的随机数引擎和多个较为高级的引擎。其中最常用的引擎是Mersenne Twister引擎,它生成高质量的、无偏的、均匀分布的随机数。除此之外,还有一些较为高级的引擎,如能够产生正态分布的Box-Muller引擎和可产生指数分布的指数引擎等等。

分布是用于将随机数引擎生成的随机数序列转换为指定分布的组件,C++11的random库提供了多个标准分布和自定义分布。最常用的分布是均匀分布(uniform distribution),以及正态分布(normal distribution)、泊松分布(poisson distribution)、指数分布(exponential distribution)等等。此外,C++11的random库还支持通过自定义函数实现分布,即通过提供一个生成随机数的函数与分布相结合,自定义生成特定类型随机数的分布。

使用C++11的random库十分简单,只需要包含头文件#include 即可。以下代码示例演示了如何使用random库来生成0~99的随机整数:


#include<random>

#include<iostream>

using namespace std;

int main()

{

  random_device randDev;

  mt19937 gen(randDev());

  uniform_int_distribution<> dis(0, 99);

  for(int i=0; i<10; ++i)

    cout<<dis(gen)<<' ';

  cout<<endl;

  return 0;

}

其中的random_device是用于生成一些随机数种子的组件,mt19937是Mersenne Twister随机数引擎,uniform_int_distribution<>是均匀分布。通过randDev()生成随机数种子后传给mt19937,再通过uniform_int_distribution<>将该引擎生成的随机数映射到0~99上即可。代码输出如下:


70 19 43 92 94 37 69 57 88 71

总之,C++11的random库提供了多种随机数生成的方式和分布方式,使用过程十分简便。在游戏、密码学、模拟和统计学等领域中都有广泛的应用。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复