在我当前正在实现的算法中,有这一行(其中 u
是图中的顶点,而 Pred(u)
是所有具有指向 u
的边的顶点):
for all s ∈ Pred(u) ∪ {u}
Pred(u)
第一部分翻译成 boost::graph 代码如下:
boost::graph_traits<Graph>::in_edge_iterator in_begin, in_end;
boost::tie(in_begin, in_end) = boost::in_edges(u, G);
for(boost::graph_traits<Graph>::in_edge_iterator i = in_begin; i != in_end; ++i) {
// Do stuff
}
现在,我正在执行 Do stuff
u
循环之外的东西明确地,但我想在 for
中执行此操作环形。是否有一些技巧可以创建迭代器,就像u
一样从 boost::in_edges
返回?
最佳答案
我认为您使用的解决方案是好的(只要 Do stuff
代码分解得很好)。
不过,如果你经常遇到这样的问题,可以看看Boost.Range ,一个用于操作值范围而不是迭代器的库。在这里,您可以使用join function获取两个范围的并集(boost::in_edges
和 u
的结果)。
关于c++ - 迭代超出范围,并且 "one more",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078860/