C ++生成随机向量

时间:2018-06-11 13:20:05

标签: c++ vector random

我刚刚开始,试图学习编程。所以我现在用C ++编程,我尝试创建一个函数,根据参数生成随机整数向量。所以到目前为止我的功能看起来像这样:

std::vector<int> GenerateRandomVector(int NumberCount,int minimum, int maximum) {
    std::vector<int> vecRandomValues;
    int i = 0, randValue = 0;
    srand(time(NULL));
    while (i < NumberCount) {
        randValue = rand() % maximum + minimum;
        vecRandomValues.push_back(randValue);
        i++;
    }
    return vecRandomValues;
}

所以,我的问题是它不尊重我给它的最小值和最大值,而且大多数时候,40%的生成数字都是0.我无法弄清楚我在这里做错了什么,也没有我对如何修复它有任何想法。我在Windows 10上使用Clion。

2 个答案:

答案 0 :(得分:7)

扩展@Some程序员dude的评论:

std::vector<int> GenerateRandomVector(int NumberCount,int minimum, int maximum) {
    std::random_device rd; 
    std::mt19937 gen(rd()); // these can be global and/or static, depending on how you use random elsewhere

    std::vector<int> values(NumberCount); 
    std::uniform_int_distribution<> dis(minimum, maximum);
    std::generate(values.begin(), values.end(), [&](){ return dis(gen); });
    return values;
}

答案 1 :(得分:2)

你对范围的计算是错误的。

randValue = rand() % (maximum - minimum + 1) + minimum;