[英]Deleting a vector in vector of vectors C++
我創建了一個包含200個頂點的鄰接表,每個向量對應於編號為i的行,其中所有頂點與i共享一條邊。 我想從鄰接表中刪除198個隨機向量。 但是我遇到了分段錯誤錯誤
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;
}
我想知道哪種是從vector的向量中刪除vector的好方法。
分割失敗的原因是您一直在選擇0到199之間的隨機數,但是adjacency_list
向量的大小正在迅速減小,因此,當您選擇random
的越界值只是時間問題。
解決方案當然是隨機選擇0到adjacency_list.size()-1
,但是我建議只是隨機選擇2行以保留,復制它們,然后丟棄整個adjacency_list
,因為std :: vector不是那些隨機重復刪除效果太好了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.