删除向量的向量中的向量

Deleting a vector in vector of vectors C++

本文关键字:向量 删除      更新时间:2023-10-16

我已经创建了一个由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;
    }

我想知道从向量的向量中删除向量的好方法

分割失败来自于这样一个事实,即您不断选择从0到199的随机数,但adjacency_list向量的大小正在迅速减少,因此当您选择random的越界值时,这只是时间问题。

解决方案当然是从0到adjacency_list.size()-1随机选择,但我建议只是随机选择2行来保留,复制它们,然后扔掉整个adjacency_list,因为std::向量与那些随机重复删除不太好。