2

在我目前正在实施的算法中,有这条线(图中u的顶点在哪里,并且Pred(u)所有顶点的边都指向u):

for all s ∈ Pred(u) ∪ {u}

我翻译成 boost::graph 代码的Pred(u)部分如下:

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

4

1 回答 1

3

我认为您使用的解决方案没问题(只要Do stuff代码被很好地分解)。

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

于 2011-08-16T13:45:25.237 回答