【问题标题】:Deleting a vector in vector of vectors C++删除向量中的向量 C++
【发布时间】:2016-09-11 13:39:27
【问题描述】:

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

我想知道哪个是从向量中删除向量的好方法。

【问题讨论】:

  • int random = rand()%200;... 删除一些元素后随机值超出范围会发生什么?
  • 是的,将其更改为 rand()%adjacency_list.size()。
  • 成功了

标签: c++ multidimensional-array vector


【解决方案1】:

分段失败的原因是您不断选择从 0 到 199 的随机数,但 adjacency_list 向量的大小正在迅速减小,因此选择越界值只是时间问题random.

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

【讨论】:

    猜你喜欢
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多