2014-11-06 121 views
0

我想在C++中洗牌一個數組,每次程序運行時,我想要有一個不同的隨機洗牌。我有myArray的長度。目前我正在使用:隨機隨機洗牌C++數組(每次不同)

random_shuffle(myArray, myArray+N) 

但這樣每次都會產生相同的洗牌。要包括一個隨機數,我嘗試過:

random_shuffle(myArray, myArray+N, rand()%i) 

但我得到錯誤cannot convert parameter 3 from 'int' to 'int&'

我認爲使用shuffle函數取而代之,根據this example,但似乎我堅持使用2011年以前的編譯器。

對不起,如果這是一個非常愚蠢的問題。對於這個特殊問題,我找不到任何東西,谷歌只是告訴我如何創建一個洗牌算法。

+0

有沒有愚蠢的問題,只有問題。有一段時間我甚至無法走路。 – SlySherZ 2014-11-06 18:37:46

+0

[此鏈接](http://www.cplusplus.com/reference/algorithm/random_shuffle/)真的很好的參考。請看 – 2014-11-06 18:38:50

+0

'rand()%i'的類型,它不是函數或可調用對象,請仔細看看示例 – user2485710 2014-11-06 18:38:59

回答

4

random_shuffle(myArray, myArray+N)將使用std::rand()來獲得隨機數。如果您希望每次程序運行時隨機序列不同,您需要先使用std::srand()對隨機生成器進行種子處理。使用當前系統時間對隨機數生成器進行播種是很常見的,通常這對於非安全相關的目的來說足夠好。您只需在程序執行過程中執行一次此操作。

std::srand(std::time(0)); 

如果你沒有在第一時間std::rand()之前調用std::srand()被調用,那麼std::rand()行爲就像你曾要求std::srand(1) - 也就是說,你含蓄具有相同值的每一個程序運行時,它的種子,這將在每次執行程序時產生相同的隨機序列。

+1

要補充:通常需要調用'std :: srand() '在你的程序中只有一次。 – moooeeeep 2014-11-06 18:44:52

+0

@moooeeeep好點。我已經將其納入我的答案。 – cdhowie 2014-11-06 18:45:50