作者:k婷妈咪1_1997 | 来源:互联网 | 2023-09-14 13:20
我想在C中对数组进行混洗,并且每次运行程序时,我都希望进行不同的随机混洗.我有myArray的长度.目前,我正在使用:random_shuffle(myArray,myArray+
我想在C中对数组进行混洗,并且每次运行程序时,我都希望进行不同的随机混洗.我有myArray的长度.目前,我正在使用:
random_shuffle(myArray, myArray+N)
但这每次都会产生相同的改组.为了包括一个随机数,我尝试了:
random_shuffle(myArray, myArray+N, rand()%i)
但我得到错误,无法将参数3从’int’转换为’int&’.
我考虑改用基于this example的shuffle函数,但是看来我使用的是2011年以前的编译器.
抱歉,这是一个非常愚蠢的问题.对于SO上的这个特定问题,我什么都找不到,谷歌只是告诉我创建改组算法的方法.
解决方法:
random_shuffle(myArray,myArray N)将使用std::rand()
获取随机数.如果希望每次运行程序时随机序列都不同,则需要先使用std::srand()
为随机数生成器作为种子.通常使用当前系统时间为随机数生成器作为种子,这通常足以满足非安全性要求相关目的.您只需在程序执行期间执行一次即可.
std::srand(std::time(0));
如果您在第一次调用std :: rand()之前未调用std :: srand(),则std :: rand()的行为就好像您已调用std :: srand(1)一样-也就是说,您每次运行程序时,都使用相同的值隐式地为它播种,这将在每次执行程序时产生相同的随机序列.