2014-11-06 2 views
0

배열을 C++로 임의로 섞고 싶을 때마다 프로그램을 실행할 때마다 다른 무작위 셔플을 사용하고 싶습니다. 나는 길이가 myArray입니다. 현재 다음을 사용하고 있습니다 :무작위 셔플 C++ 배열 (매번 다름)

random_shuffle(myArray, myArray+N) 

그러나 이것은 매번 동일한 셔플을 생성합니다. 임의의 숫자를 포함하기 위해, 나는 시도 :

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

하지만 오류 cannot convert parameter 3 from 'int' to 'int&'를 얻을.

나는 this example을 기반으로 shuffle 함수를 사용하는 것을 고려했지만, 2011 년 이전 컴파일러를 사용하여 붙어있는 것처럼 보입니다.

죄송합니다. 불법적 인 질문 인 경우 죄송합니다. 그래서이 특별한 문제에 대해서는 아무 것도 찾을 수 없었습니다. Google은 셔플 알고리즘을 만드는 방법을 알려주었습니다.

+0

어리석은 질문은없고 질문 만 있습니다. 내가 걸을조차 수없는 때가있었습니다. – SlySherZ

+0

[이 링크] (http://www.cplusplus.com/reference/algorithm/random_shuffle/)는 정말 좋은 참고 자료입니다. 보십시오 –

+0

'rand() % i'의 타입은 함수 나 호출 가능한 객체가 아닙니다.이 예제를 더 잘 보시기 바랍니다. – user2485710

답변

4

random_shuffle(myArray, myArray+N)std::rand()을 사용하여 임의의 숫자를 얻습니다. 프로그램이 실행될 때마다 무작위 순서가 달라 지도록하려면 std::srand()을 사용하여 먼저 임의 생성기를 시드해야합니다. 일반적으로 비보안 관련 목적에 충분히 적합한 현재 시스템 시간을 사용하여 난수 생성기를 시드하는 것이 일반적입니다. 프로그램 실행 중에 한 번만 수행하면됩니다. 당신이 std::srand(1)라고했던 것처럼

std::srand(std::time(0)); 

처음 std::rand() 전에 std::srand()를 호출하지 않는 경우 은 std::rand() 동작합니다 다음,라고 - 즉, 당신이 암시 적으로 같은 값으로 프로그램이 실행될 때마다 그것을 씨앗, 프로그램의 매 실행마다 동일한 랜덤 시퀀스가 ​​생성됩니다.

+1

이것을 덧붙이려면 : 보통'std :: srand() '한 번만 프로그램에서. – moooeeeep

+0

@moooeeeep 좋은 지적. 나는 그것을 내 대답에 포함 시켰습니다. – cdhowie