2016-09-29 4 views
1

У меня есть список целых чисел intList = {1, 3. 5. 2} (Его просто пример целого числа и размера оба неизвестны). Я должен выбрать случайное число из этого списка.Выберите случайное число из списка целых чисел

RandomInt = rand() % intList.size() 

будет работать аналогичным образом, какRandomInt = rand() % 4

и генерировать ряд RANDON от 1 до 4. в то время как IntList отличается.

Если я использую RandomInt = std::random_shuffle = (intList, intList.size()) все еще получаю ошибку. Я не знаю, как выбрать случайное число из списка.

+0

RandomInt = станд :: 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 :: array' вместо' std :: vector' , –

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}; 

Теперь определим случайные генераторы:

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++, и их следует использовать только в случае принудительного. Не так жалко и бессмысленно трудно использовать, как время h^H^H^Hstuff, но не далеко от этого. – 6502

0
int arrayNum[4] = {1, 3, 5, 2}; 
    int RandIndex = rand() % 5; // random between zero and four 
    cout << arrayNum[RandIndex]; 
Смежные вопросы