从整数列表中选择一个随机数
问题描述:
我有一个整数列表intList = {1, 3. 5. 2}
(它只是一个示例整数和大小都未知)。我必须从该列表中选择一个随机数。从整数列表中选择一个随机数
RandomInt = rand() % intList.size()
将以类似的方式工作为RandomInt = rand() % 4
和产生到4到1之间的数randon而intList中是不同的。
如果我使用RandomInt = std::random_shuffle = (intList, intList.size())
仍然出错。我不知道如何从列表中选择一个随机数。
答
你只需要使用“间接”:
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' 。 –
答
因为,作为一个子步骤中,您需要生成随机数,你不妨做它的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)];
}
答
int arrayNum[4] = {1, 3, 5, 2};
int RandIndex = rand() % 5; // random between zero and four
cout << arrayNum[RandIndex];
RandomInt =的std :: random_shuffle(intList中,intList.size()); –
'std :: random_shuffle'的范围从[first,last)到functor的可选附加参数。它也返回'void'。一个正确的调用看起来像'std :: random_shuffle(intList.begin(),intList.end())' –