为什么Boost Graph Library在删除顶点时会使所有迭代器无效?

时间:2016-03-22 09:10:48

标签: c++ boost graph boost-graph

Boost Graph Library文档中says当你从图中移除一个顶点时(当它的顶点至少存储在一个向量中时),所有的迭代器(和描述符)都会失效。

这令我感到惊讶,因为这样做似乎没有必要。

有没有办法让adjacency_list以一种在这种情况下不会使迭代器无效的方式工作?我不能以某种方式“无效”顶点并在方便的时候垃圾收集它吗?

1 个答案:

答案 0 :(得分:0)

它只是底层容器语义:Iterator invalidation rules

这显然也是一种权衡:你可以免费获得O(1)顶点索引。

如果您需要其他内容,请为顶点容器使用不同的容器选择器(例如listS)。

  

不(通常)更好地“无效”'向量中的顶点并在下次调整大小时进行垃圾收集吗?

确实将顶点标记为已删除的常见模式。对于此类情况,boost::filtered_graph<>是一个方便的适配器。