我刚刚开始,试图学习编程。所以我现在用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。
答案 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;