Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 STL을 사용하여 배열 섞기

<시간/>

여기에서 우리는 C++에서 Shuffle과 random_shuffle을 볼 것입니다. 이 함수는 C++에서 배열 요소를 섞는 데 사용됩니다. 배열 대신 벡터를 사용할 수도 있습니다. 사용법은 비슷합니다. 먼저 random_shuffle()을 보자. [왼쪽, 오른쪽] 범위의 요소를 무작위로 재배열하는 데 사용됩니다. 이 기능은 각 요소의 위치를 ​​무작위로 선택한 위치의 위치와 무작위로 교환합니다.

모든 경우에 어떤 요소가 사용되는지 알려주는 임의 생성기 함수를 제공할 수 있습니다. 일부를 제공하지 않으면 자체 임의 생성기 기능을 사용합니다.

예시

#include 네임스페이스 std;int myRandomGenerator(int j) { return rand() % j;}main() { srand(unsigned(time(0))); 벡터 arr; for (int j =1; j <20; ++j) // 20개의 숫자를 생성하여 벡터에 추가 arr arr.push_back(j); random_shuffle(arr.begin(), arr.end()); // 내장된 랜덤 함수를 사용하여 cout <<"arr elements:"; for (vector::iterator i =arr.begin(); i !=arr.end(); ++i) cout <<' ' <<*i; cout <::iterator i =arr.begin(); i !=arr.end(); ++i) cout <<' ' <<*i; cout < 

출력

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

이제 shuffle() 함수가 무엇인지 살펴보겠습니다. 이것은 또한 [왼쪽, 오른쪽] 범위의 요소를 재정렬하는 데 사용됩니다. 무작위로. 하나의 균일한 난수 생성기가 필요합니다.

예시

#include 네임스페이스 std;main() { vector arr; 서명되지 않은 시드 =0; for (int j =1; j <20; ++j) // 20개의 숫자를 생성하여 벡터에 추가 arr arr.push_back(j); 셔플(arr.begin(), arr.end(), default_random_engine(시드)); cout <<"arr 요소:"; for (vector::iterator i =arr.begin(); i !=arr.end(); ++i) cout <<' ' <<*i; cout < 

출력

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()을 사용하여 균일한 난수 생성기를 전달하면 일종의 결과가 생성됩니다.