【C++】C++ 11 random 库 随机数

C++ 11 random库

  • random库的组件主要有随机数引擎随机数分布引擎

随机数引擎类

  • 类名:default_random_engine
  • 声明方法:类名 对象名
  • 随机数引擎类是可以独立运行的随机数发生器
  • 均匀的概率生成某一类型的随机数
  • 无法指定随机数的范围、概率等信息,因而被称为“原始的随机数发生器”,由于不能指定生成随机数的范围,它通常不会被单独使用。

随机数分布类

  • 类名:
类名 声明方法 效用
uniform_int_distribution 类名<随机数类名> 对象名 指定范围的随机非负整数
uniform_real_distribution 类名<随机数类名> 对象名 指定范围的随机实数
bernoulli_distribution 类名 对象名 指定概率的随机布尔值(伯努利分布)
  • uniform distribution就是一致分布、均匀分布的意思,uniform这里是 adj.一致的
  • 随机数分布类是一个需要随机数引擎类的支持才能运行的类
  • 能根据用户的需求利用随机数引擎生成符号条件的随机数,例如某一区间、某一概率分布的随机数。

使用方法

1. 创建 unsigned 类型随机数

  • default_random_engine,定义的调用运算符返回随机的 unsigned 类型的值
#include <iostream>
#include <random>
using namespace std;
int main()
{
    default_random_engine e;
    for(int i = 0; i < 10; i++)
        cout<< e() << endl;
    return 0;
}

2. 创建指定范围的随机整数

  • uniform_int_distribution,模板类,模板参数为随机数类型。
  • 模板参数只能是int、unsigned、short、unsigned short、long、unsigned long、long long、unsigned long long中的一种。
  • 构造函数接受两个值,表示随机数的分布范围,是闭区间
#include <iostream>
#include <random>
using namespace std;
int main()
{
	default_random_engine e;
	uniform_int_distribution<unsigned> u(0,9);
	for(int i = 0; i < 10; i++)
		cout << u(e) << endl;
    return 0;
}

3. 创建指定范围的随机实数

  • uniform_real_distribution ,模板类,参数表示随机数类型
  • 可选类型有float、double、long double
  • 构造函数接受两个值,表示随机数的分布范围,是闭区间
#include <iostream>
#include <random>
using namespace std;
int main()
{
	default_random_engine e;
	uniform_real_distribution<double> u(0,9);
	for(int i = 0; i < 10; i++)
		cout << u(e) << endl;
    return 0;
}

4. 创建服从0-1分布的随机数

  • bernoulli_distribution 意为:伯努利分布即0-1分布。
  • 不是模板类。
  • 构造函数只有一个参数,表示该类返回true的概率,该参数默认为0.5,即返回true和false的概率相等
#include <iostream>
#include <random>
using namespace std;
int main()
{
    default_random_engine e;
    bernoulli_distribution b;
    for(int i = 0; i < 10; i++)
        cout << b(e) << endl;
    return 0;
}
posted @ 2022-10-31 19:14  起司头_棕裤裤  阅读(607)  评论(0编辑  收藏  举报