2016-09-11 62 views
0

我創建了包含200個頂點的鄰接列表,每個向量對應於編號爲i的行,它具有與i共享邊的所有頂點。我想從鄰接列表中刪除198個隨機向量。但我得到分段錯誤錯誤刪除矢量向量中的向量C++

void contract_edge(vector<vector<int> >&adjacency_list , int pos) 
    { 
     adjacency_list.erase(adjacency_list.begin()+pos); 
    } 
    int main() 
    { 
     vector<vector<int> > adjacency_list(200); 
     int size = 200; 
     while(size > 2) 
     { 
      int random = rand()%200; 
      contract_edge(adjacency_list,random); 
      size--; 
     } 
     return 0; 
    } 

我想知道哪個是從矢量矢量中刪除矢量的好方法。

+2

'int random = rand()%200;'...在刪除幾個元素並且隨機值超出界限後會發生什麼? –

+0

yup將其更改爲rand()%adjacency_list.size()。 –

+0

做到了 –

回答

1

分段失敗來自事實,即您不斷選取0到199之間的隨機數,但adjacency_list向量的大小正在迅速減小,所以選擇超出範圍的值時只是時間問題random

解決方案當然是從0到adjacency_list.size()-1隨機挑選,但我建議隨機選擇2行來代替,複製它們,然後丟掉整個adjacency_list,因爲std :: vector不太好與那些隨機重複刪除。