首页 文章

在Boost Graph Library中,为什么添加边缘会使Edge迭代器失效(以及其他问题)?

提问于
浏览
2

关于BGL documentation中图表"Summary of Descriptor and Iterator Invalidation"的几个问题:

  • 为什么添加边会使边和邻接迭代器无效;为什么isn 't every column of the add_edge() row 910063 ? Wouldn' t只是追加进/出边缘列表?

  • 如果图形是定向的,为什么删除边只会使边迭代器无效;为什么第二行中倒数第二列不仅仅是"EL=vecS"?在无向图中的情况下,不会删除边缘将其从两个边缘列表中删除(一个用于源,一个用于目标顶点),这会使这两个列表中的迭代器无效?

谢谢!

1 回答

  • 2

    所有这些效果都遵循通常的Iterator invalidation rules

    为什么添加边会使边和邻接迭代器无效;为什么不是add_edge()行的每一列都“OK”?是否只会附加输入/输出边缘列表?

    是的,他们会被追加 . 并且,看到他们可能会重新分配这样做,它们会使迭代器失效 .

    如果图形是定向的,为什么删除边只会使边迭代器无效

    矩阵中的符号不仅有点令人困惑 .

    Docs:“此操作会导致指向边 (u,v) 的任何未完成的边描述符或迭代器变为无效 . 此外,如果 OutEdgeList 选择器是 vecS ,则此操作将使指向顶点 u 的边列表的任何迭代器无效,并且顶点 v 在无向和双向的情况下 . 另外,对于有向图,这会使任何 edge_iterator 无效 . “

    所以你误读了:它不仅使"if the graph is directed"无效 . 它 also 使指向无向和双向情况下目标顶点( v )的边列表的任何迭代器无效 . 如果你意识到如何存储边缘边缘,这是有道理的 .

相关问题