2

关于BGL 文档中标记为“描述符和迭代器无效摘要”的图表的几个问题:

  1. 为什么添加边会使边和邻接迭代器无效;为什么 add_edge() 行的每一列都不是“OK”?不会简单地附加输入/输出边缘列表吗?
  2. 如果图是有向的,为什么删除边只会使边迭代器无效?为什么第二行倒数第二列不只是“EL=vecS”?在无向图的情况下,不会从两个边列表(一个用于源顶点,一个用于目标顶点)中删除一条边,这会使这两个列表中的迭代器无效?

谢谢!

4

1 回答 1

2

所有这些效果都遵循通常的迭代器失效规则

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

是的,它们将被附加。而且,看到他们这样做可能会重新分配,他们使迭代器无效。

  1. 如果有向图,为什么删除边只会使边迭代器无效

矩阵中的符号有点令人困惑。

文档:“此操作导致任何未完成的边缘描述符或指向边缘的迭代器(u,v)变得无效。此外,如果OutEdgeList选择器是,vecS那么此操作将使指向边缘列表的任何迭代器无效,并且对于无向中的顶点u也无效v和双向情况。此外,对于有向图,这会使任何edge_iterator."

所以你误读了:它不仅使“如果图形是定向的”无效。在无向和双向情况下,它还会使指向目标顶点 ( )的边列表的任何迭代器无效v如果您意识到后端是如何存储的,那么这是有道理的。

于 2015-11-24T00:37:32.677 回答