簡體   English   中英

在向量C ++的向量中刪除向量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM