在Boost Graph Library文档中,当你从图形中移除一个顶点时(当它的顶点至少存储在一个向量中时),所有迭代器(和描述符)都是无效的 .
这让我感到惊讶,因为这似乎没有必要 .
有没有办法让 adjacency_list
以某种方式工作't aggressively invalidate iterators in such a case? Can' t我不知怎的只是'invalidate'顶点并在一些方便的时候垃圾收集它?
在Boost Graph Library文档中,当你从图形中移除一个顶点时(当它的顶点至少存储在一个向量中时),所有迭代器(和描述符)都是无效的 .
这让我感到惊讶,因为这似乎没有必要 .
有没有办法让 adjacency_list
以某种方式工作't aggressively invalidate iterators in such a case? Can' t我不知怎的只是'invalidate'顶点并在一些方便的时候垃圾收集它?
1 回答
它只是底层容器语义:Iterator invalidation rules
这显然是一个权衡:你可以免费获得O(1)顶点索引 .
如果您需要其他内容,请为顶点容器使用不同的容器选择器(例如
listS
) .这确实是将顶点标记为已删除的常见模式 .
boost::filtered_graph<>
是这种情况的方便适配器 .