2011-08-16 61 views
2

在我目前实现该算法,有这种行(其中u是在图形顶点,并Pred(u)是具有u指向边缘所有顶点):迭代范围,和“一个更”

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

Pred(u)部分我翻译成的boost ::图这样的代码:

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明确,但我喜欢做的事它在t他for循环。是否有一些技巧来创建迭代器,好像uboost::in_edges返回?

+0

这是一个联盟,而不是你在'Pred(u)∪{u}'中间的一个u吗? – Flexo

+0

@awoodland:是的。我的意见是,字体在可读性方面不是很好。 – carlpett

+0

可能只是我的眼睛和这个显示器... – Flexo

回答

3

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

但是,如果您经常遇到这样的问题,您可以看看Boost.Range,这是一个用于处理值范围而不是迭代器的库。在这里,您可以使用join function来获得两个范围的联合(boost::in_edgesu的结果)。

+0

+1,我不知道关于Boost.Range,它看起来非常有用。 – Flexo