在我目前正在实施的算法中,有一条线(其中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
一样?
答案 0 :(得分:3)
我认为您使用的解决方案是正常的(只要Do stuff
代码已经很好地分解)。
但是,如果您经常遇到此类问题,可以查看Boost.Range,这是一个用于操作值范围而不是迭代器的库。在这里,您可以使用join function获取两个范围的并集(boost::in_edges
和u
的结果)。