c++ - 查询使用随机整数作为向量的大小
问题描述
所以我很难记住如何在 C++ 中调用随机数。我不知道该怎么做,所以如果有人能提醒我,那就太好了。我正在尝试制作一个随机大小的向量,其中填充了随机整数。这是我的以下代码:
#include <cstdlib>
#include <iostream>
#include <vector>
int main()
{
int randSize = rand();
int sum = 0;
int product = 1;
std::vector<int> numbers(randSize);
int output;
for (int i = 0; i < numbers.size(); i++)
{
int randNum = rand();
numbers[i] = randNum;
output = numbers[i]&2;
if (output == 0)
{
sum += numbers[i];
}
else
{
product = product * numbers[i];
}
}
std::cout << "The sum of even numbers is " << sum << "\n";
std::cout << "The product of off numbers is " << product << "\n";
}
解决方案
正如评论中已经指出的那样,最好忘记rand()
并使用标准库提供的设施<random>
。例如:
std::vector<int> makeRandomBunch(int min, int max, std::size_t min_elements, std::size_t max_elements)
{
std::mt19937 generator(42);
std::uniform_int_distribution<std::size_t> size_distribution(min_elements, max_elements);
std::size_t num_elements = size_distribution(generator);
std::vector<int> data;
data.reserve(num_elements);
std::uniform_int_distribution<int> element_distribution(min, max);
std::generate_n(std::back_inserter(data), num_elements, [&](){ return element_distribution(generator); });
return data;
}
在这里,我们使用了一个mt19937
伪随机数生成器(不要被这个名字吓到,它只是以它使用的算法命名),以 42 作为我们的随机源。Anstd::uniform_int_distribution
可用于将随机生成器提供的随机性整形为从给定范围采样的随机整数。我们使用 a为我们的向量uniform_int_distribution
随机选择一个大小,elements_min
并elements_max
在我们的向量中保留该空间量。我们使用另一个uniform_int_distribution
从中挑选int
元素(介于min
和之间max
)。最后,我们std::generate_n
结合使用 aback_inserter
来用元素填充我们的向量并返回向量......