【问题标题】:Iterate over range, and "one more"迭代范围,并“再一次”
【发布时间】:2011-10-28 01:49:54
【问题描述】:

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

目前,我正在为u 明确地在循环之外执行Do stuff 的内容,但我想在for 循环中执行此操作。是否有一些技巧可以创建迭代器,就好像 u 从 boost::in_edges 返回一样?

【问题讨论】:

  • 那是一个联合,不是Pred(u) ∪ {u}中间的一个u,对吧?
  • @awoodland:是的。我同意,字体的可读性不是很好。
  • 可能只是我的眼睛和这台显示器......

标签: c++ boost iterator boost-graph


【解决方案1】:

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

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

【讨论】:

  • +1,我不知道 Boost.Range,它看起来很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 1970-01-01
  • 2022-07-24
  • 2019-10-07
  • 1970-01-01
相关资源
最近更新 更多