Computer >> Máy Tính >  >> Lập trình >> C ++

Trộn một mảng bằng cách sử dụng STL trong C ++

Ở đây chúng ta sẽ thấy Shuffle và random_shuffle trong C ++. Các hàm này được sử dụng để xáo trộn các phần tử mảng trong C ++. Chúng ta cũng có thể sử dụng vector thay vì các mảng, cách sử dụng cũng tương tự. Trước tiên, hãy để chúng tôi xem random_shuffle (). Nó được sử dụng để sắp xếp lại ngẫu nhiên các phần tử trong phạm vi [trái, phải). Chức năng này hoán đổi vị trí của từng phần tử một cách ngẫu nhiên với vị trí của một số vị trí được chọn ngẫu nhiên.

Chúng tôi có thể cung cấp một số hàm tạo ngẫu nhiên để cho biết phần tử nào sẽ được sử dụng trong mọi trường hợp. Nếu chúng tôi không cung cấp một số, nó sẽ sử dụng chức năng tạo ngẫu nhiên của riêng nó.

Ví dụ

#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 elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
   cout << ' ' << *i;
   cout << endl;
   // using myRandomGenerator
   random_shuffle(arr.begin(), arr.end(), myRandomGenerator);
   cout << "arr elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
   cout << ' ' << *i;
   cout << endl;
}

Đầu ra

Phần tử
arr elements: 5 14 15 6 3 16 13 12 10 2 4 1 17 9 18 11 7 8 19
arr elements: 8 10 5 6 14 1 15 3 19 16 13 18 7 9 4 12 11 17 2

Bây giờ chúng ta hãy xem hàm shuffle () là gì. Điều này cũng được sử dụng để sắp xếp lại các phần tử trong phạm vi [trái, phải). ngẫu nhiên. Nó cần một bộ tạo số ngẫu nhiên thống nhất.

Ví dụ

#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 elements:";
   for (vector<int>::iterator i = arr.begin(); i != arr.end(); ++i)
   cout << ' ' << *i;
   cout << endl;
}

Đầu ra

Phần tử
arr elements: 19 7 5 6 12 4 13 3 1 17 11 14 18 2 8 15 9 10 16

Sự khác biệt duy nhất giữa random_shuffle () và shuffle () là, random_shuffle () sử dụng hàm rand () để tạo các chỉ số ngẫu nhiên và shuffle () sử dụng bộ tạo số ngẫu nhiên thống nhất. Mặc dù vậy, nếu chúng ta chuyển bộ tạo số ngẫu nhiên thống nhất với random_shuffle (), thì nó sẽ tạo ra một số loại kết quả.