C++ 用随机数填充向量

C++ 用随机数填充向量,c++,vector,C++,Vector,我在写的一个类中有一个函数,它应该用随机数填充向量。出于某种原因,它只生成相同的随机数,并用该数填充数组,尽管使用了一个循环,其中反复调用rand。我用time0作为rand的种子。我试着把种子放在环里面,结果没有什么不同。这是我的功用“数组”实际上是一个向量 void fillArray() { srand(time(0)); for (unsigned int i = 0; i < array.size(); i++) {

我在写的一个类中有一个函数,它应该用随机数填充向量。出于某种原因,它只生成相同的随机数,并用该数填充数组,尽管使用了一个循环,其中反复调用rand。我用time0作为rand的种子。我试着把种子放在环里面,结果没有什么不同。这是我的功用“数组”实际上是一个向量

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

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

上面的代码用随机数填充向量显然是正确的。错误来自我的类中的此函数:

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

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

您可以检查数组的状态。当for的调用完成时,大小可能为零,在这种情况下,数组中不会写入任何内容。我建议你先检查一下

此外,执行模块200不利于随机性。我从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)."

你执行过几次吗?你有没有试着把这个放到主函数中,然后对一个大小为10的向量进行运算来做一个简单的测试?你的问题让我再次审视我的课堂。我所做的是在我的类中使用重载的“at”函数来复制vector类的at函数。我将其声明为const,以防止索引更改。移除const使其正常工作。谢谢大家!@Sabien如果您找到了答案,那么将at声明为const不应该导致您描述的问题,至少不会导致此答案中的实现出现问题。问题可能在代码的其他地方,您无意中在未意识到的情况下修复了它。