2016-09-29 4 views
1

私は整数のリストintList = {1, 3. 5. 2}を持っています(その整数とサイズの例は不明です)。私はそのリストから乱数を選ぶ必要があります。整数のリストから乱数を選択

RandomInt = rand() % intList.size() 

RandomInt = rand() % 4

と同様の方法で動作し、intListが異なるが1~4の間ランドン番号を生成します。

私が使用している場合は、RandomInt = std::random_shuffle = (intList, intList.size()) はまだエラーが発生します。私はどのようにしてリストから乱数を選んだのか分からない。あなただけの「間接」を使用する必要があります

+0

RandomInt =のstd :: random_shuffle(intList、intList.size()); –

+1

'std :: random_shuffle'は、ファンクタのオプションの追加引数で[first、last]の範囲をとります。 'void 'も返す。 'std :: random_shuffle(intList.begin()、intList.end())' –

答えて

2

:サブステップとして、あなたは乱数を生成する必要があり、以来

std::vector<int> list{6, 5, 0, 2}; 
int index = rand() % list.size(); // pick a random index 
int value = list[index]; // a random value taken from that list 
+0

リストのサイズが固定されている場合は、 'std :: vector'の代わりに' std :: array'を使うことを検討してください。 –

4

を、あなたにもそれを(代わりにモジュロを使用してのC++ 11の方法を行う可能性がありますちなみに、)known to have a slight bias toward low numbersである:

は今、あなたは乱数発生器を定義するあなたは

#include <iostream> 
#include <random> 
#include <vector> 

int main() 
{ 
    const std::vector<int> intList{1, 3, 5, 2}; 

で始まる言います3210

std::random_device rd; 
    std::mt19937 eng(rd()); 
    std::uniform_int_distribution<> distr(0, intList.size() - 1); 

あなたはランダムな要素を生成する必要がある場合は、あなたがこれを行うことができます:

intList[distr(eng)]; 
} 
+2

これは、これがrandとmodの方法にはるかに優れた統計的性質を持つことに言及したいかもしれません。 – Bathsheba

+0

@Bathshebaありがとう!既知のバイアスについてのリンクを追加しました。それはあなたの意味ですか? –

+0

乱数生成器はこの答えには適していないと思います。彼らはC + +に加えて、慎重で無意味な使い方が難しく、強制された場合にのみ使用するべきです。 cra^H^H^Hstuffと同じくらい時間が経つにつれて、哀れみも無意味でもありません。 – 6502

0
int arrayNum[4] = {1, 3, 5, 2}; 
    int RandIndex = rand() % 5; // random between zero and four 
    cout << arrayNum[RandIndex]; 
関連する問題