我想在C++中对数组进行洗牌,并且每次运行程序时,我想要进行不同的随机洗牌。我有myArray
的长度。目前我正在使用:
random_shuffle(myArray, myArray+N)
但这每次都会产生相同的洗牌。为了包含随机数,我尝试过:
random_shuffle(myArray, myArray+N, rand()%i)
但我得到了错误cannot convert parameter 3 from 'int' to 'int&'
.
我考虑过使用shuffle
函数代替,基于这个例子 http://en.cppreference.com/w/cpp/algorithm/random_shuffle#Example,但我似乎一直在使用 2011 年之前的编译器。
抱歉,如果这是一个极其愚蠢的问题。我在 SO 上找不到这个特定问题的任何内容,谷歌只是告诉我创建洗牌算法的方法。
random_shuffle(myArray, myArray+N)
将使用std::rand() http://en.cppreference.com/w/cpp/numeric/random/rand获得随机数。如果您希望每次运行程序时随机序列都不同,则需要首先使用以下命令为随机生成器播种std::srand() http://en.cppreference.com/w/cpp/numeric/random/srand。使用当前系统时间来为随机数生成器提供种子是很常见的,这通常足以满足非安全相关的目的。您只需在程序执行期间执行一次此操作。
std::srand(std::time(0));
如果你不打电话std::srand()
在第一次之前std::rand()
被称为,那么std::rand()
表现得就像你已经打电话过一样std::srand(1)
——也就是说,每次运行程序时,您都隐式地使用相同的值作为种子,这将在每次执行程序时产生相同的随机序列。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)