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++) 当函数完成时分配在堆栈上的数组发生了什么?

C++,实例化 std::vector 时性能不佳

c++ - 无法使用 boost::asio 收听 UDP 端口

java - 非常困难的 XML -> JSON 按顺序解析 3 个数组,然后回到第一个数组循环另一个数组

c++ - 使用给定的第一个和最后一个迭代器迭代范围

c++ - Linux 中 NSight Eclipse 中的 CUDA 调试

c++ - 从 unordered_map 中删除值的有效方法,当只给出值 C++

c++ - 寻找 Boost message_queue 和序列化用法的简单示例

c++ - boost 线程死锁,任何人都可以检查为什么?

c++ - std::vector 迭代器不兼容