我遇到的问题是:
vector<int> steps_list;
steps_list.reserve(runs);
for (int i=0;i<runs;i++){
int steps=0;
bool in_con=false;
srand(time(0));
int init_pos=rand()%mylat;
while (in_con==false) {
srand(time(0));
int step=2*(rand()%2)-1;
init_pos+=step;
init_pos=init_pos%grid.size();
if (grid[init_pos]==0){
in_con=true;
}
steps+=1;
}
steps_list.push_back(steps);
}
for (int i=0;i<mylat;i++){
cout<<steps_list[i]<<" ";
}
我想在steps_list向量中存储所有不同的步骤,但不是只存储一步,而是用它填充向量。
我无法确定我的问题在哪里。我不熟悉矢量。
答案 0 :(得分:2)
您需要移动此行
srand(time(0));
在循环之外,最好在程序开始时执行一次。
您正在为随机数生成器播种,我的猜测是您获得秒分辨率的时间。循环迭代只需不到一秒钟,因此您总是使用相同的值播种并获得相同的随机数。
答案 1 :(得分:1)
我在猜测,但错误可能是您在srand(time(0))
的每次调用之前致电rand()
。这是让你的随机数完全非随机的非常好的方式。
这可能是你所看到的解释吗?
无论如何,在程序开始时调用srand(time(0))
一次,而不是其他地方。