2013-11-23 74 views
-1

我有問題的代碼是:添加元素在一個循環中矢量

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

如何定義'in_con'? – jens108

+0

@jens:as bool in_con = false;以上和以下for循環。 – George

+1

在哪種情況下'in_con'設置爲true?你可以展示更多的代碼嗎? – jens108

回答

2

您需要移動這條線

srand(time(0)); 

循環外,最好在你的程序的開頭做一次。

你播種的隨機數發生器,我的猜測是你獲得的時間有分辨率。循環迭代不到一秒鐘,所以你總是用相同的值進行播種並獲得相同的隨機數。

+0

:好的,謝謝!這樣做。 – George

1

我在猜測,但錯誤可能是您在每次致電rand()之前致電srand(time(0))。這是一個非常好的方法,使您的隨機數字完全unrandom

這可能是你看到的解釋嗎?

在任何情況下,請在程序開始時以及其他地方撥打srand(time(0))

+0

:好的,謝謝。那是錯誤。你的答案雖然是第二。 :) – George

+0

@George是我想了大約30秒 – john