问题描述
所以我有一个随机对象:
So i have a Random object:
typedef unsigned int uint32;
class Random {
public:
Random() = default;
Random(std::mt19937::result_type seed) : eng(seed) {}
private:
uint32 DrawNumber();
std::mt19937 eng{std::random_device{}()};
std::uniform_int_distribution<uint32> uniform_dist{0, UINT32_MAX};
};
uint32 Random::DrawNumber()
{
return uniform_dist(eng);
}
我可以改变(通过另一个函数或其他方式)分布上限的最佳方法是什么?
What's the best way I can vary (through another function or otherwise) the upper bound of of the distribution?
(也愿意接受其他风格问题的建议)
(also willing to take advice on other style issues)
推荐答案
分发对象是轻量级的.当您需要随机数时,只需构建一个新的分布.我在游戏引擎中使用这种方法,经过基准测试后,它可以与使用旧的 rand() 相媲美.
Distribution objects are lightweight. Simply construct a new distribution when you need a random number. I use this approach in a game engine, and, after benchmarking, it's comparable to using good old rand().
此外,我在 GoingNative 2013 直播中询问了如何改变分发范围,标准委员会成员 Stephen T. Lavavej 建议简单地创建新分发,因为它不应该是表演问题.
Also, I've asked how to vary the range of distribution on GoingNative 2013 live stream, and Stephen T. Lavavej, a member of the standard committee, suggested to simply create new distributions, as it shouldn't be a performance issue.
以下是我将如何编写您的代码:
Here's how I would write your code:
using uint32 = unsigned int;
class Random {
public:
Random() = default;
Random(std::mt19937::result_type seed) : eng(seed) {}
uint32 DrawNumber(uint32 min, uint32 max);
private:
std::mt19937 eng{std::random_device{}()};
};
uint32 Random::DrawNumber(uint32 min, uint32 max)
{
return std::uniform_int_distribution<uint32>{min, max}(eng);
}
这篇关于改变uniform_int_distribution的范围的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!


大气响应式网络建站服务公司织梦模板
高端大气html5设计公司网站源码
织梦dede网页模板下载素材销售下载站平台(带会员中心带筛选)
财税代理公司注册代理记账网站织梦模板(带手机端)
成人高考自考在职研究生教育机构网站源码(带手机端)
高端HTML5响应式企业集团通用类网站织梦模板(自适应手机端)