c++ 可变长度数组元素随机生成器

nxowjjhe  于 2022-11-19  发布在  其他
关注(0)|答案(1)|浏览(391)

一个简单任务,生成我想要长度数组
我也不知道如何得到我创建的数组,除了我自己的奇怪的方法。我的代码的第一部分工作正常吗?我应该重新考虑我想得到他们的方式(可选)?
虽然,我理解为什么我每次都得到相同的值,但我不认为,这与我的问题有什么关系。
我写下这个:

cin >> x;
  int array1[x];
  int array2[x]; 
  for (int i = 0; i <= x; i++) {
    array1[i] = rand() % 10 + 1;
    array2[i] = rand() % 10 + 1;
  }
  

  cout << "[" << array1[a];
  for (int a = 0; a <= x; a++) {
    a += 1; 
    cout << ", " <<array1[a];
  }

  cout << "] [" << array2[b];
  for (int b = 0; b <= x; b++) {
    b += 1; 
    cout << ", " << array2[b];
  }
  cout << "]";

为什么x = 6,5,15时会得到一些不正常结果:

[2, 5, 9, 6, 0] [8, 1, 9, 6, 32759]
[2, 5, 9, 6, 2, 8, 3, 2, 8] [8, 1, 9, 6, 2, 7, 4, 7, 7]
dfuffjeb

dfuffjeb1#

或者使用header和std::vector,std::generate(没有原始循环)。同样,当你写代码时,写一些可读的小函数。为了得到唯一的随机数,随机生成器需要被播种。

#include <algorithm>
#include <iostream>
#include <random>
#include <vector>

int generate_random_number()
{
    // only initialize the generator and distribution once (static)
    // and initialize the generator from a random source (device)
    static std::mt19937 generator(std::random_device{}());
    static std::uniform_int_distribution<int> distribution{ 1,10 };
    return distribution(generator);
}

// overload stream output for vector, so we can use vectors in std::cout
std::ostream& operator<<(std::ostream& os, const std::vector<int>& values)
{
    bool comma{ false };
    
    os << "[";
    for (const int value : values)
    {
        if (comma) os << ", ";
        os << value;
        comma = true;
    }
    os << "]";

    return os;
}

// helper function to create an array of given size
std::vector<int> create_random_array(const std::size_t size)
{
    std::vector<int> values(size); // create and allocate memory for an array of size ints
    std::generate(values.begin(), values.end(), generate_random_number); // fill each value in the array with a value from the function call to generate_random_number
    return values;
}

int main()
{
    std::size_t count;
    std::cout << "how many random numbers ? : ";
    std::cin >> count;

    auto array1 = create_random_array(count);
    std::cout << array1 << "\n";

    auto array2 = create_random_array(count);
    std::cout << array2 << "\n";

    return 0;
}

相关问题