Memento在伪随机数发生器中的应用

时间:2014-02-05 22:19:51

标签: design-patterns random memento

我想问一下,伪随机数生成器中究竟是如何使用memento的?我对伪随机数生成器有很高的了解,但我没有看到任何纪念品(即使我在那里阅读)。非常感谢你的回答:)

1 个答案:

答案 0 :(得分:0)

我相信你在谈论设计模式纪念品。如果是这样,那么在我看来,memento被用作随机数生成器的内部状态。首先,您使用特定种子(即其状态)创建随机数生成器,然后在下一个随机数生成期间使用此种子。所以使用标准的纪念品术语:

  • originator是随机数生成器,
  • 看护人是使用随机数生成器检索数字的来电者,
  • memento是随机数生成器的状态,基于该状态生成下一个随机值

C ++中的标准rand()不支持检索其状态,因此唯一的恢复操作只是在开始时通过srand()存储您设置的种子,然后使用它将生成器恢复到初始状态。

但是,您可以重新实现它,以便它支持状态查询,然后恢复到任何(不仅是初始状态)状态。关于如何实现这一点,请参阅this SO answer。此外,在同一个线程中也提到了新的c ++ 11随机数生成器默认提供此功能。