我有一个蒙特卡罗系统,我有一些状态随机演变,使用内部随机数发生器。我还在该程序的其他地方存储了此状态的const
副本,因为我想知道它将如何发展,如果它实际发展。这需要随机数生成器的两件事:
1)克隆生成器而不修改它的能力,以存储在复制的状态版本中。
2)能够确定发生器的const
副本中的下一个随机数。
这只能使用标准库吗?如果没有,你能推荐第三方图书馆吗?
答案 0 :(得分:3)
标准C++11 random generators是可以复制的普通对象,副本将生成相同的序列。他们还可以使用operator<<
和operator>>
将其内部状态序列化和反序列化为iostream。
生成随机数的operator()
不是const
函数,因为它会更改生成器的内部状态。因此,您无法直接在生成器的const
副本上调用它。但你可以制作const
的临时可变副本,从中生成一个值,然后将其销毁。
如果你的编译器不支持C ++ 11,你可以使用Boost.Random library,这是标准的基础。