扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
在C++11之前,我们通常采用rand函数来生成随机数。
成都网站设计、成都网站制作服务团队是一支充满着热情的团队,执着、敏锐、追求更好,是创新互联的标准与要求,同时竭诚为客户提供服务是我们的理念。创新互联公司把每个网站当做一个产品来开发,精雕细琢,追求一名工匠心中的细致,我们更用心!但rand函数对一些情况显得难以处理:
下文将使用C++11定义在头文件random中的随机数库通过一组协作的类来解决这些问题:随机数引擎类和随机数分布类。
uniform_int_distribution:产生均匀分布的整数
templateclass uniform_int_distribution;
// IntType
// An integer type. Aliased as member type result_type.
// By default, this is int.
#include#include#includeusing namespace std;
int main()
{// 产生[1, 100]左闭右闭区间的随机整数
uniform_int_distributionu(1, 100);
default_random_engine e;
// 为随机数引擎设置随机种子, 若不设置每次生成的随机数相同(可以创建时设置)
// 类似srand的用法, 相同的种子生成的随机数相同
// default_random_engine e(time(NULL));
e.seed(time(NULL));
for (size_t i = 0; i< 10; ++i)
{cout<< u(e)<< " ";
}
cout<< endl;
return 0;
}
生成随机浮点数uniform_real_distribution:产生均匀分布的实数
templateclass uniform_real_distribution;
// RealType
// A floating-point type. Aliased as member type result_type.
// By default, this is double.
#include#include#includeusing namespace std;
int main()
{// 生成[-1, 1]范围随机浮点数
// 模板参数只能是浮点类型(float, double, long double)
uniform_real_distributionu(-1, 1);
default_random_engine e(time(NULL));
for (size_t i = 0; i< 10; ++i)
{cout<< u(e)<< " ";
}
cout<< endl;
return 0;
}
生成非均匀分布随机数
正态分布随机数templateclass normal_distribution;
#include#include#includeusing namespace std;
int main()
{// 生成符合均值为10, 标准差为2的随机数
normal_distributionu(10, 2);
default_random_engine e(time(NULL));
for (size_t i = 1; i<= 100; ++i)
{printf("%-9.6lf ", u(e));
if (i % 10 == 0)
{ cout<< endl;
}
}
cout<< endl;
return 0;
}
二项分布的布尔值class bernoulli_distribution;
#include#include#includeusing namespace std;
int main()
{// 生成1的概率为0.7
bernoulli_distribution u(0.7);
default_random_engine e(time(NULL));
for (int i = 0; i< 10; i++) {cout<< u(e)<< " ";
}
cout<< endl;
return 0;
}
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流