有没有一种方法可以使用随机生成器中内置的C++标准库来获取序列中的特定随机数,而无需全部保存?
喜欢
srand(cTime);
getRand(1); // 10
getRand(2); // 8995
getRand(3); // 65464456
getRand(1); // 10
getRand(2); // 8995
getRand(1); // 10
getRand(3); // 65464456
最佳答案
需要C++ 11随机数引擎来实现成员函数discard(unsigned long long z)
(第26.5.1.4节),该函数将随机数序列提高z
步骤。复杂性保证非常薄弱:“不比
“z
连续调用“e()
”的复杂性。显然,此成员的存在纯粹是为了使有可能在可能时公开更多高性能的实现成为可能,如注释274所述:
给定discard
,您可以通过重新生成生成器,丢弃n
值并使用下一个生成的值来轻松实现按顺序检索n-1
th编号的要求。
我不知道哪种标准RNG引擎(如果有的话)适合discard
的有效实现。可能值得您花一些时间进行调查和分析。