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

时间:2017-09-19 17:32:20

标签: c++ function c++11 random

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

2 个答案:

答案 0 :(得分:7)

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

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

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

int number = numbers[index];

以下是使用<random>的C ++ 11版本:

#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];

答案 1 :(得分:1)

这样做的好方法可能是使用shuffle。基本上,你随机播放数组然后开始逐个选择数字

#include <iostream>     // std::cout
#include <algorithm>    // std::shuffle
#include <array>        // std::array
#include <random>       // std::default_random_engine

int main () {
    std::array<int, 4> foo {1,4,5,6};

    std::shuffle(foo.begin(), foo.end(), std::default_random_engine(12345));

    std::cout << "shuffled elements:";
    for (int x: foo)
        std::cout << ' ' << x;
    std::cout << '\n';

    return 0;
}