迭代范围,“再一个”

时间:2011-08-16 13:22:44

标签: c++ boost iterator boost-graph

在我目前正在实施的算法中,有一条线(其中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一样?

1 个答案:

答案 0 :(得分:3)

我认为您使用的解决方案是正常的(只要Do stuff代码已经很好地分解)。

但是,如果您经常遇到此类问题,可以查看Boost.Range,这是一个用于操作值范围而不是迭代器的库。在这里,您可以使用join function获取两个范围的并集(boost::in_edgesu的结果)。