所以我很难记住如何在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";
}
正如评论中已经指出的那样,best forget about 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
伪随机数生成器(不要被名称吓到,它只是以the algorithm it uses命名)以42作为我们的随机源。可以使用std::uniform_int_distribution
将随机生成器提供的随机性整形为从给定范围采样的随机整数。我们使用uniform_int_distribution
随机选择elements_min
和elements_max
之间的大小为我们的向量和reserve我们的向量中的空间量。我们使用另一个uniform_int_distribution
,我们将从int
和min
之间选择我们的max
元素。最后,我们使用std::generate_n
结合back_inserter
来填充我们的向量元素并返回向量...