在Boost Graph Library文档中says当你从图中移除一个顶点时(当它的顶点至少存储在一个向量中时),所有的迭代器(和描述符)都会失效。
这令我感到惊讶,因为这样做似乎没有必要。
有没有办法让adjacency_list
以一种在这种情况下不会使迭代器无效的方式工作?我不能以某种方式“无效”顶点并在方便的时候垃圾收集它吗?
答案 0 :(得分:0)
它只是底层容器语义:Iterator invalidation rules
这显然也是一种权衡:你可以免费获得O(1)顶点索引。
如果您需要其他内容,请为顶点容器使用不同的容器选择器(例如listS
)。
不(通常)更好地“无效”'向量中的顶点并在下次调整大小时进行垃圾收集吗?
确实将顶点标记为已删除的常见模式。对于此类情况,boost::filtered_graph<>
是一个方便的适配器。