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

Randomly shuffle C++ array (different each time)

本文关键字:C++ 数组 随机      更新时间:2023-10-16

我想在C++中打乱一个数组,每次运行程序时,我都想进行不同的随机打乱。我有长度为的myArray。目前我正在使用:

random_shuffle(myArray, myArray+N)

但这每次都会产生相同的混洗。为了包含一个随机数,我尝试了:

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

但是我得到了错误CCD_ 2。

基于这个例子,我考虑使用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)一样——也就是说,每次运行程序时都会隐式地为其设定相同的值,这将在每次执行程序时产生相同的随机序列。