是否有任何函数或方法可以从数组中随机选择一个数字(或2个数字或更多)?
答案 0 :(得分:9)
根据您需要的数量,数组的大小以及数组是否需要保持其顺序,您可以使用std::random_shuffle
重新排序数组,然后从0..n-1循环得到n个随机数。当你想要获得相对于数组长度的大量数字时,这会更好。
如果这似乎不合适,您可以使用srand()
和rand() % n
作为数组的索引,以获得随机选择的非常好的近似值。
答案 1 :(得分:3)
对于大小为n的数组,只需在0..n-1范围内生成一个随机数,然后选择数组中索引的数字。
答案 2 :(得分:2)
int RandomElement(int *array, int size)
{
return array[ rand() % size ];
}
如果您接受rand作为随机数生成器。
答案 3 :(得分:2)
randomElement = arr[rand() % ARRAY_SIZE];
这是最简单的方法。如果你想做一些更复杂的事情,你可以使用Boost.Random
库,比如为数组的不同元素分配不同的概率。
答案 4 :(得分:1)
rand()%n通常几乎都是非随机的,至少对于遗留(坏)随机生成器(其中有很多,要小心)。
如果你负担得起转换,那么((双)rand()/ MAX_RAND)* n更好。或者使用随机生成器,其低位已知是随机的,并对较低的log n位进行拒绝。
答案 5 :(得分:1)
如果要从数组中选择两个随机数,而不重复使用相同的数字,则以下方法可以正常工作
int array[SIZE];
i = rand() % SIZE;
rand1 = array[i];
j = 1 + rand() % (SIZE - 2);
rand2 = array[(i + j) % SIZE];
答案 6 :(得分:1)
#include<iostream>
#include<cstdlib>
template<typename T,size_t n>
T randElem(T (&a)[n])
{
return a[rand() % n];
}
int main()
{
int a[]={1,2,3,4,5};
int n=randElem<int>(a);
std::cout<<n;
}