2014-11-06 105 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