我创建了一个包含 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/