在C ++中随机播放vs random_shuffle

在这里,我们将看到C ++中的Shuffle和random_shuffle。让我们首先看看random_shuffle。它用于随机重新排列范围[左,右)中的元素。此函数将每个元素的位置与某些随机选择的位置的位置随机交换。

我们可以提供一些随机数生成器函数来判断在每种情况下将采用哪个元素。如果我们不提供某些功能,它将使用自己的随机生成器功能。

示例

#include <bits/stdc++.h>
using namespace std;
int myRandomGenerator(int j) {
   return rand() % j;
}
main() {
   srand(unsigned(time(0)));
   vector<int> arr;
   for (int j = 1; j < 20; ++j) //generate 20 numbers and add them into vector arr
      arr.push_back(j);
   random_shuffle(arr.begin(), arr.end()); //use inbuilt random function to shuffle
   cout << "arr元素:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
      cout << ' ' << *i;
   cout << endl;
   //使用myRandomGenerator-
   random_shuffle(arr.begin(), arr.end(), myRandomGenerator);
   cout << "arr元素:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
      cout << ' ' << *i;
   cout << endl;
}

输出结果

arr元素: 5 14 15 6 3 16 13 12 10 2 4 1 17 9 18 11 7 8 19
arr元素: 8 10 5 6 14 1 15 3 19 16 13 18 7 9 4 12 11 17 2

现在让我们看看shuffle()函数是什么。这也用于重新排列范围[左,右)中的元素。随机地。它需要一个统一的随机数生成器。

示例

#include <bits/stdc++.h>
using namespace std;
main() {
   vector<int> arr;
   unsigned seed = 0;
   for (int j = 1; j < 20; ++j) //generate 20 numbers and add them into vector arr
      arr.push_back(j);
   shuffle(arr.begin(), arr.end(), default_random_engine(seed));
   cout << "arr元素:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
      cout << ' ' << *i;
   cout << endl;
}

输出结果

arr元素: 19 7 5 6 12 4 13 3 1 17 11 14 18 2 8 15 9 10 16

random_shuffle()和之间的唯一区别shuffle()是random_shuffle()使用rand()函数生成随机索引,并shuffle()使用统一随机数生成器。但是,如果我们通过带有random_shuffle()的统一随机数生成器,则它将生成相同类型的结果。