是否可以从定义的数字集中选择随机数

Naf*_*tom 0 c++ random function c++11

随机函数通常在给定范围内生成随机数.但是可以从预定义的列表中随机选择吗?例如我有[1,4,5,6],我想只从这个列表中随机选择.如果是这样,怎么样?谢谢:) Ps :: C++代码将帮助我一个大问题^^

Jam*_*Maa 7

下面的代码会有所帮助,而不是选择一个随机整数,我们可以在集合中选择一个随机索引;

int numbers[4] = {1,4,5,6};

srand (time(NULL));
int index = rand() % 4;

int number = numbers[index];
Run Code Online (Sandbox Code Playgroud)

这是一个使用的C++ 11版本<random>:

#include <random>

int numbers[4] = {1,4,5,6};

std::default_random_engine generator;
std::uniform_int_distribution<int> distribution(0,3);
int index = distribution(generator);  // generates number in the range 0..3

int number = numbers[index];
Run Code Online (Sandbox Code Playgroud)

  • 除非`n`除以'RAND_MAX + 1`,否则`rand()%n`也是有偏见的.这通常是"n = 4"的情况,但通常不是这种情况.虽然对于小的"n"和临时用例来说可能是可以接受的. (2认同)