c++ - 删除 vector vector C++ 中的 vector

标签 c++ multidimensional-array vector

我创建了一个包含 200 个顶点的邻接表,每个 vector 对应于编号为 i 的行,所有顶点都与 i 共享一条边。我想从邻接表中删除 198 个随机 vector 。但是我遇到了段错误

    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 中删除 vector 的好方法。

最佳答案

分段失败是因为你不断地从 0 到 199 中选择随机数,但是 adjacency_list vector 的大小正在迅速减小,所以你选择一个出来只是时间问题-random 的边界值。

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

关于c++ - 删除 vector vector C++ 中的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39436683/

相关文章:

c++ - 在 OpenMP 中使用私有(private)版本的全局外部变量

c++ - 好坏 : Calling destructor in constructor

java - java中的二维数组静态初始化

C++ "No matching constructor for initializing Employee"

c++ - 获取刚刚插入 vector C++ 的元素的位置

c++ - 自定义交互式 shell

c++ - Boost 和 Windows 套接字 - 正确处理 TCP 客户端断开连接的情况

c - 如何从标准输入读取矩阵并放入C中的二维数组

c++优化整数数组

c++ - 如何动态添加对象