在boost图库中,remove_edge将使边迭代器无效,因此删除顶点的所有外边缘的正确方法是什么,例如,我试图删除顶点0的所有外边缘。下面的代码段不能正常工作。
Graph G(N);
graph_traits <Graph>::out_edge_iterator ei, ei_end;
for (boost::tie(ei, ei_end) = out_edges(0, G); ei != ei_end; ++ei) {
vertex targ = target(*ei, G);
cout << "target vtx = " << targ << endl;
if ( edge(0, targ, G).second != 0 )
remove_edge(0, targ, G);
}
答案 0 :(得分:1)
您可以在外边缘(http://www.boost.org/doc/libs/1_58_0/libs/graph/doc/adjacency_list.html)上调用clear_out_edges
{/ 1}}
void clear_vertex(vertex_descriptor u, adjacency_list& g)
删除与顶点u的所有边。顶点仍然出现在图的顶点集中。
对描述符和迭代器稳定性的影响与对u作为源或目标的所有边调用remove_edge()的影响相同。
void clear_out_edges(vertex_descriptor u, adjacency_list& g)
从顶点u移除所有外边缘。顶点仍然出现在图的顶点集中。
对描述符和迭代器稳定性的影响与为u作为源的所有边调用remove_edge()的影响相同。
此操作不适用于无向图(使用clear_vertex()代替)。
void clear_in_edges(vertex_descriptor u, adjacency_list& g)
我必须支持任何 MutableGraph,只有clear_vertex