Задайте вопрос об использовании случайного целого числа в качестве размера вектора - PullRequest
0 голосов
/ 05 апреля 2019

, поэтому я не могу вспомнить, как вызывать случайные числа в 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";



}

1 Ответ

1 голос
/ 05 апреля 2019

Как уже указывалось в комментариях, лучше всего забыть о 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 как наш источник случайности. std::uniform_int_distribution может использоваться для преобразования случайности, обеспечиваемой генератором случайных чисел, в случайные целые числа, выбранные из заданного диапазона. Мы используем uniform_int_distribution, чтобы случайным образом выбрать размер от elements_min до elements_max для нашего вектора и зарезервировать такое количество места в нашем векторе. Мы используем другой uniform_int_distribution, из которого мы выберем наши int элементы (в диапазоне от min до max). Наконец, мы используем std::generate_n в сочетании с back_inserter, чтобы заполнить наш вектор элементами и вернуть вектор & hellip;

живой пример здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...