例如:
for (...)
{
... std::uniform_real_distribution<float>(min, max)(rng) ...
}
在我看来,直觉上构造函数除了存储这两个值外不需要做太多事情,并且 uniform_*_distribution 实例中不应该有任何状态。我自己还没有对它进行分析(我还没有处于项目的那个阶段),但我觉得这个问题属于那里:)
我知道这对于某些分布类型来说不是一个好主意 - 例如,std::normal_distribution
可能会成对生成它的数字,而第二个数字每次都会被浪费。
我觉得我所拥有的比仅仅访问 rng()
并自己进行数学计算更具可读性,但如果有任何其他方法可以更直接地编写它,我会很感兴趣。
最佳答案
std::uniform_real_distribution
的对象是轻量级的,因此每次在循环内构造它们不是问题。
有时,分布的隐藏内部状态很重要,但在这种情况下并不重要。 reset()
函数在所有流行的 STL 实现中什么都不做:
void
reset() { }
例如,std::normal_distribution
不成立:
void
reset()
{ _M_saved_available = false; }
关于c++ - 每次在循环中进行临时均匀随机分布的效率如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34934480/