【发布时间】:2013-10-02 21:18:47
【问题描述】:
所以我有一个随机对象:
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);
}
我可以改变(通过另一个函数或其他方式)分布上限的最佳方法是什么?
(也愿意就其他风格问题征求意见)
【问题讨论】:
-
在首次初始化
distribution后,您无法更改它们的边界。您应该如何进行很大程度上取决于您使用随机数的目的以及为什么需要更改边界。 -
@us2012 这是错误的;你可以。
-
Use std::uniform_int_distribution and define its range later 的可能重复项(先发制人的反对意见:是的,这是较新的,并且标题有点切题,但 IMO 它有一个更切题的答案,而且通常能更快地切入主题)
-
冒着偏见的风险,这两个不同的问题具有基本相同的公认答案 - “另一种方法是添加方法......”另一个问题的答案的一部分与在这里接受答案。这个答案还包括使用,带有 std::mt19937。也就是说
.param方法是新的。由于这个问题现在已经 5 年了,也许最好的做法是将另一个标记为重复并在此处修改接受的答案?或者,只需将问题保持原样:)
标签: c++ c++11 random distribution