2017-11-24 4 views
-3

私は検索しましたが、私のニーズに正確に合うものを見つけるのに苦労しました。 srand()でシードを設定した後、rand()で一連の乱数を生成したい。C++:非同期決定のためのオブジェクトにrand()ジェネレータを保存できますか?

これを非同期に行う必要があり、他のランダムシーケンスが同時に生成される可能性があります。一度に生成されるものと同じ決定論的なシーケンスを維持する必要があります。 rand()はグローバルなので、rand()でこれを行う方法はないと思います。

私の心の中の解決策は、srand/randのように機能するが、保存してオブジェクトとして渡すことができるものである。例えば

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

私はC++ 11からの「余分なランダム」utilsのいずれかを必要としませんが、彼らは何とかここに私を助け場合、私はそれらを使用します。私はちょうどどこを見て理解していない。

+6

++ 11 'あなたの心の中でソリューションがどのように見えるかのあなたの一例ですまさにC++ 11のランダムなことです。 –

答えて

2

私はC++ 11

まあから "余分なランダム" utilsのいずれかを必要としない、あなたの問題に応じて、ランダムC++ 11はあなたが必要とする正確に何です。それはあなたの心の中にあなたの小さなソリューションのように見える。

これはcppreferenceからインスピレーションを得た例である: `私はCから「余分なランダム」utilsのいずれかを必要としない

#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

ありがとうございました!もう1つの質問は申し訳ありません - どうすればこのようなランダムなエンジンを植えることができますか?私はドキュメントを見渡しましたが、「srand」と同等の入力は見られませんでした。 –

+0

@BenWileyリンクされたcppreferenceリンクを参照してください。それはすべてそれを説明します。私がそこに書いた例は、cppreferenceから実際に盗まれたものです。私が示したコードでは、ランダムなエンジンがランダムな物理デバイスを使ってシードされています。 –

+0

ありがとう@GuillaumeRacicot - 私は理解していると思います。申し訳ありませんが私の質問が素朴に聞こえる場合は、私はまだC + +に非常に新しい感じ。だから、私は別のランダムエンジンを設定し、同じスレッドで別の新しいディストリビューションを作成しても、配布が初期化されると、初期化時にランダムエンジンが使用されていると思いますか? –

関連する問題