2017-11-24 1 views
-3

나는 주변을 수색했지만 내 요구에 정확히 맞는 것을 찾기 위해 고심했다. srand()를 사용하여 시드를 설정 한 후 rand()를 사용하여 일련의 난수를 생성하려고합니다.C++ : 비동기 결정을 위해 객체에 rand() 생성기를 저장할 수 있습니까?

catch는 비동기 적으로 수행해야하며 다른 임의의 시퀀스가 ​​동시에 생성 될 수 있습니다. 한 번에 모두 생성 될 동일한 결정 성 순서를 유지해야합니다. rand()는 전역 적이므로 rand()를 사용하여이 작업을 수행 할 방법이 없다고 생각합니다.

내 마음에있는 해결책은 사냥감/랜드처럼 행동하지만 물건으로 저장되고 통과 될 수있는 것입니다. 예 :

RandGenerator random(srand_seed) int r = random.get_random();

나는 C++ 11에서 "추가 랜덤"유틸 중 하나를 필요로하지 않지만, 어떻게 든 여기에 나를 도와 주면 내가 그들을 사용합니다. 나는 어디를보아야하는지 이해하지 못합니다.

+6

가'내가처럼 당신의 마음에 솔루션 모습 귀하의 예를 11' ++ C에서 "추가 랜덤"유틸 중 하나를 필요가 없습니다

cppreference에서 영감을 예입니다 정확하게 C++ 11 무작위가하는 것. –

답변

2

나는 C++ 11 무작위이 정확하게 당신이 필요하고, 문제에 따라, C++ 11

음에서 "추가 랜덤"유틸 중 하나를 필요가 없습니다. 그것은 심지어 당신의 마음에 작은 해결책처럼 보입니다.

#include <random> 

int main() 
{ 
    // Use the default random engine. 
    // Thread local for thread safety, and to not recreate that large object. 
    thread_local std::default_random_engine rnd(std::random_device{}()); 

    // A a uniform distribution of 1 to 6, like a dice 
    // It does not have the random state, but only the distribution the numbers should have. 
    std::uniform_int_distribution<int> uniform_dist(1, 6); 

    // Generate a random number using a distribution and the random engine. 
    int randomNumber = uniform_dist(rnd); // from 1 to 6 
} 
+0

감사합니다! 한가지 더 질문드립니다. - 이처럼 임의의 엔진에 어떻게 시드 할 수 있습니까? 나는 문서를 살펴 봤지만'srand'에 상응하는 입력을 보지 못했습니다 (뭔가 빠뜨린 것 같습니다). –

+0

@BenWiley는 연결된 cppreference 링크를 참조하십시오. 그것은 모든 것을 설명합니다. 필자가 작성한 예제는 cppreference에서 실제로 도난당했습니다. 코드에서 임의의 물리적 장치를 사용하여 임의의 엔진에 시드를 지정합니다. –

+0

고마워요. @GuillaumeRacicot - 이해할 것 같습니다. 미안, 내 질문에 순진하게 들린다면, 나는 C++에 대해 여전히 새로운 것을 느낀다. 그래서 배포판을 초기화 할 때 다른 랜덤 엔진을 설정하고 동일한 스레드에서 또 다른 새로운 배포판을 만들더라도 초기화 할 때 임의의 엔진을 사용하게 될 것입니다. –

관련 문제