我想用C ++对数组进行混洗,每次运行程序时,我都希望有一个不同的随机改组。我有myArray
的长度。目前我正在使用:
random_shuffle(myArray, myArray+N)
但每次都会产生同样的改组。要包含一个随机数,我试过:
random_shuffle(myArray, myArray+N, rand()%i)
但我收到错误cannot convert parameter 3 from 'int' to 'int&'
。
我考虑使用基于this example的shuffle
函数,但看起来我使用的是2011年之前的编译器。
很抱歉,如果这是一个非常愚蠢的问题。我在SO上找不到任何关于这个特定问题的东西,谷歌只是告诉我如何创建一个改组算法。
答案 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)
一样 - 也就是说,您隐含了种子每次运行程序时它都具有相同的值,每次执行程序时都会生成相同的随机序列。