2011-08-16 57 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