2016-08-28 387 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的構造函數的種子。