2014-11-19 6 views
4
#include <random> 
#include <algorithm> 
#include <vector> 

int main() { 
    std::vector <int> a = {1, 2, 3}; 
    std::mt19937 generator; 
    std::random_shuffle(a.begin(), a.end(), generator); 
} 
내가 g이 코드를 컴파일하려고

++ -std = C + +0,표준 생성기를 STL 함수에 전달하는 방법은 무엇입니까?

/usr/include/c++/4.9.2/bits/random.h:546:7: note: candidate expects 0 arguments, 1 provided 

제대로 그 일의 어떤 방법을 종료 거대한 컴파일러 덤프를 수신?

+3

'std :: shuffle'을 사용하십시오. – chris

+0

Thx, 매력처럼 일했습니다. 나를 받아들이 기 위해 답으로 게시 할 수 있습니까? – whoever

+1

래퍼 함수 또는 람다를 사용할 수 있습니다. 'RandomFunc' 매개 변수는 자체적으로'n' 매개 변수를 취할 것으로 예상하고 C++ 11 난수 기능은 모두 해당 인스턴스에 구워진 범위 매개 변수를 갖습니다. 하지만 크리스의 대답이 가장 좋습니다. – Rook

답변

7

당신이 사용하려는 std::random_shuffle의 과부하는 "RandomFunc"를 취 R로 호출하는 경우

함수 객체가 구간 [0, N)에 std::iterator_traits<RandomIt>::difference_type로 컨버터블 형태의 임의로 선택된 값을 반환 C++ 14 (N)

, std::random_shuffle는 발전기보다는 그 "RandomFunc"을 취 std::shuffle 대신에 중단된다. 단순히 기능을 std::shuffle으로 변경하십시오.

+1

+1 [더 이상 사용되지 않는 질문과 연결되는 링크] (http://stackoverflow.com/q/22600100/1708801). –

+0

@ShafikYaghmour, 고마워, 나는 그걸 조금 더 넓혀봤을거야. – chris

관련 문제