2

私が現在実装しているアルゴリズムには、次の線があります(ここ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か?

4

1 に答える 1

3

Do stuffあなたが使用しているソリューションは問題ないと思います (コードが十分に因数分解されている限り)。

ただし、このような問題に頻繁に直面する場合は、反復子の代わりに値の範囲を操作するためのライブラリであるBoost.Rangeを見ることができます。ここで、join 関数を使用して、2 つの範囲の結合を取得できます ( と の結果boost::in_edges) u

于 2011-08-16T13:45:25.237 に答える