我在一个正在编写的类中有一个函数,它应该用随机数填充一个向量。出于某种原因,它只生成相同的随机数,并使用该数字填充数组,尽管使用了一个循环,其中rand()被反复调用。我花了时间兰德(0)。我尝试将种子放在循环内部并且没有任何区别。这是我的功能。 'array'实际上是一个向量。
void fillArray()
{
srand(time(0));
for (unsigned int i = 0; i < array.size(); i++)
{
array.at(i) = rand() % 200;
}
}
答案 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);
}
它是为了在函数中使用向量类而创建的,但是我最初声明它使得它为每次循环迭代返回相同的索引。