删除向量C ++向量中的向量

时间:2016-09-11 13:39:28

标签: c++ multidimensional-array vector

我创建了包含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;
    }

我想知道哪种方法可以从矢量矢量中删除矢量。

1 个答案:

答案 0 :(得分:1)

分段失败的原因是你不断选择从0到199的随机数,但adjacency_list向量的大小正在迅速减小,所以你选择一个不合适的时间只是时间问题。边界值random

解决方案当然是从0到adjacency_list.size()-1随机选择,但我建议只是随机选择2行来保留,复制它们,然后丢弃整个adjacency_list,作为std :: vector对于那些随机的重复删除不太好。