C++ 生成随机向量

C++ Generating random vector

本文关键字:向量 随机 C++      更新时间:2023-10-16

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

扩展@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;
}

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

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