【问题标题】:Inquire about using a random integer as the size of a vector查询使用随机整数作为向量的大小
【发布时间】:2019-04-05 00:31:41
【问题描述】:

所以我很难记住如何在 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";



}

【问题讨论】:

标签: c++ vector random


【解决方案1】:

正如 cmets 中已经指出的那样,best forget about rand() 并改用&lt;random&gt; 中标准库提供的设施。例如:

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_minelements_max 之间的大小作为我们的向量和reserve 向量中的空间量。我们使用另一个uniform_int_distribution,我们将从中选择int 元素(范围在minmax 之间)。最后,我们使用std::generate_nback_inserter 组合使用元素填充我们的向量并返回向量......

live example here

【讨论】:

    猜你喜欢
    • 2014-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 1970-01-01
    • 2015-05-23
    • 2023-03-11
    • 2020-12-15
    相关资源
    最近更新 更多