关于BGL documentation中图表"Summary of Descriptor and Iterator Invalidation"的几个问题:
-
为什么添加边会使边和邻接迭代器无效;为什么isn 't every column of the add_edge() row 910063 ? Wouldn' t只是追加进/出边缘列表?
-
如果图形是定向的,为什么删除边只会使边迭代器无效;为什么第二行中倒数第二列不仅仅是"EL=vecS"?在无向图中的情况下,不会删除边缘将其从两个边缘列表中删除(一个用于源,一个用于目标顶点),这会使这两个列表中的迭代器无效?
谢谢!
1 回答
所有这些效果都遵循通常的Iterator invalidation rules
是的,他们会被追加 . 并且,看到他们可能会重新分配这样做,它们会使迭代器失效 .
矩阵中的符号不仅有点令人困惑 .
Docs:“此操作会导致指向边
(u,v)
的任何未完成的边描述符或迭代器变为无效 . 此外,如果OutEdgeList
选择器是vecS
,则此操作将使指向顶点u
的边列表的任何迭代器无效,并且顶点v
在无向和双向的情况下 . 另外,对于有向图,这会使任何edge_iterator
无效 . “所以你误读了:它不仅使"if the graph is directed"无效 . 它 also 使指向无向和双向情况下目标顶点(
v
)的边列表的任何迭代器无效 . 如果你意识到如何存储边缘边缘,这是有道理的 .