随机改组C ++数组(每次不同)

时间:2014-11-06 18:35:01

标签: c++ arrays random shuffle

我想用C ++对数组进行混洗,每次运行程序时,我都希望有一个不同的随机改组。我有myArray的长度。目前我正在使用:

random_shuffle(myArray, myArray+N)

但每次都会产生同样的改组。要包含一个随机数,我试过:

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

但我收到错误cannot convert parameter 3 from 'int' to 'int&'

我考虑使用基于this exampleshuffle函数,但看起来我使用的是2011年之前的编译器。

很抱歉,如果这是一个非常愚蠢的问题。我在SO上找不到任何关于这个特定问题的东西,谷歌只是告诉我如何创建一个改组算法。

1 个答案:

答案 0 :(得分:5)

random_shuffle(myArray, myArray+N)将使用std::rand()获取随机数。如果您希望每次运行程序时随机序列不同,您需要首先使用std::srand()为随机生成器播种。通常使用当前系统时间为随机数生成器播种,这通常足以用于非安全相关的目的。您只需在程序执行期间执行此操作一次。

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

如果您在第一次调用std::srand()之前未拨打std::rand(),那么std::rand()的行为就像您调用了std::srand(1)一样 - 也就是说,您隐含了种子每次运行程序时它都具有相同的值,每次执行程序时都会生成相同的随机序列。