2016-08-28 157 views
0

如果我生成用下面的代码的随机数:是否有可能获得先前由std :: uniform_int_distribution生成的随机数?

#include <iostream> 
#include <random> 

int main() 
{ 
    std::random_device rd; 
    std::mt19937 gen(rd()); 
    std::uniform_int_distribution<> dis(0, 999); 

    for (int n=0; n<1000; ++n) 
     std::cout << dis(gen) << ' '; 
    std::cout << '\n'; 
} 

是有可能得到相反的顺序先前生成的值(不将它们保存到一个数组,等等)循环结束后, ,并做这样的事情:

for (int n=0; n<1000; ++n) 
     std::cout << GetPrev(dis, gen) << ' '; 
    std::cout << '\n'; 

+0

不,这是不可能的。你必须自己保存号码。如果你想以相反的顺序排列它们,我可以建议一个['std :: stack'](http://en.cppreference.com/w/cpp/container/stack)? –

回答

0

如果您使用相同值生成伪随机引擎,它将生成相同的位序列,这将在生成相同数字的分布中进行转换。所以你需要存储传递给mt19937的构造函数的种子。