首页 文章

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

提问于
浏览
-1

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

这让我感到惊讶,因为这似乎没有必要 .

有没有办法让 adjacency_list 以某种方式工作't aggressively invalidate iterators in such a case? Can' t我不知怎的只是'invalidate'顶点并在一些方便的时候垃圾收集它?

1 回答

  • 0

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

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

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

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

    这确实是将顶点标记为已删除的常见模式 . boost::filtered_graph<> 是这种情况的方便适配器 .

相关问题