C++ 用随机数填充向量
我在写的一个类中有一个函数,它应该用随机数填充向量。出于某种原因,它只生成相同的随机数,并用该数填充数组,尽管使用了一个循环,其中反复调用rand。我用time0作为rand的种子。我试着把种子放在环里面,结果没有什么不同。这是我的功用“数组”实际上是一个向量C++ 用随机数填充向量,c++,vector,C++,Vector,我在写的一个类中有一个函数,它应该用随机数填充向量。出于某种原因,它只生成相同的随机数,并用该数填充数组,尽管使用了一个循环,其中反复调用rand。我用time0作为rand的种子。我试着把种子放在环里面,结果没有什么不同。这是我的功用“数组”实际上是一个向量 void fillArray() { srand(time(0)); for (unsigned int i = 0; i < array.size(); i++) {
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不应该导致您描述的问题,至少不会导致此答案中的实现出现问题。问题可能在代码的其他地方,您无意中在未意识到的情况下修复了它。