用随机数填充向量

时间:2014-11-28 23:53:09

标签: c++ vector

我在一个正在编写的类中有一个函数,它应该用随机数填充一个向量。出于某种原因,它只生成相同的随机数,并使用该数字填充数组,尽管使用了一个循环,其中rand()被反复调用。我花了时间兰德(0)。我尝试将种子放在循环内部并且没有任何区别。这是我的功能。 'array'实际上是一个向量。

void fillArray()
   {
      srand(time(0));

      for (unsigned int i = 0; i < array.size(); i++)
      {
         array.at(i) = rand() % 200;
      }
   }

2 个答案:

答案 0 :(得分:0)

您可以检查数组的状态。也许,当for的调用完成时,size()为零,在这种情况下,没有任何内容写入数组。我建议你先检查一下。

此外,执行模块200不利于随机性。我从man页面复制了rand()的片段:

In  Numerical Recipes in C: The Art of Scientific Computing (William H.
       Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New
       York:  Cambridge University Press, 1992 (2nd ed., p. 277)), the follow-
       ing comments are made:
          "If you want to generate a random integer between 1 and 10,  you
          should always do it by using high-order bits, as in

             j = 1 + (int) (10.0 * (rand() / (RAND_MAX + 1.0)));

          and never by anything resembling

             j = 1 + (rand() % 10);

          (which uses lower-order bits)."

答案 1 :(得分:-1)

上面的代码用随机数填充矢量显然是正确的。错误来自我班上的这个功能:

int at(int index)
   {
      return array.at(index);
   }

它是为了在函数中使用向量类而创建的,但是我最初声明它使得它为每次循环迭代返回相同的索引。