c++ - 迭代超出范围,并且 "one more"

标签 c++ boost iterator boost-graph

在我当前正在实现的算法中,有这一行(其中 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 返回?

最佳答案

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

不过,如果你经常遇到这样的问题,可以看看Boost.Range ,一个用于操作值范围而不是迭代器的库。在这里,您可以使用join function获取两个范围的并集(boost::in_edgesu 的结果)。

关于c++ - 迭代超出范围,并且 "one more",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7078860/

相关文章:

c++ - 解析器帮助程序不工作

c++ - 如何查询一个框是否在rtree中

java - java迭代器中的自定义链表无法迭代整个列表

java - 遍历Java中的成员变量

c++ - 如何跟踪 C++ vector 上的当前和上一个迭代器?

c++ - bitset 数据是否以相反的顺序存储?

c++ - 声明 "const typedef enum"在 C++ 中有效吗?

c# - 如何在 XP 下工作的 C# 代码中使用 c++ dll?

c++ - 在 MinGW 编译的项目中使用 MSVC 编译的 Boost 二进制文件

ubuntu - 如何在 Ubuntu 14.04 上安装最新的 Boost 版本?