如何编写标准的C ++迭代器?

时间:2011-09-18 05:40:49

标签: c++ iterator std

我有以下简单的Graph类,每个Node,我存储一组传出的Arcs

#include <iostream>
#include <vector>
#include <map>
#include <set>

struct Arc {
  char label;
  int targetNode;
};

struct Graph {
  std::vector<int> nodes;
  std::map< int, std::set<Arc*> > outgoingArcsPerNode;
};

如何在图中的所有弧上提供标准C ++ iterator(迭代次序无关紧要),隐藏弧如何存储在图中?

我想使用它类似于以下内容:

int main() {
  Graph g;
  for (Graph::const_iterator it = g.arcsBegin(); it != g.arcsEnd(); ++it) {
    Arc* a = *it;
  }
}

我听说过boost::iterator,但我发现它令人困惑。在这种情况下,也许有人可以提示如何使用它?

2 个答案:

答案 0 :(得分:2)

如果您不想使用boost,请查看迭代器必须提供的内容:STL documentation

否则,您可以使用boost iterator library。请参阅iterator_facade tutorial,这与您提出的要求非常接近。

答案 1 :(得分:1)

创建内部有两个迭代器的类:一个在地图上,另一个在集合上。

每个++都应用于设置迭代器。当它到达结尾时,增加map迭代器并重新初始化set iterator。

此外,您可以使用boost :: iterator_facade - 它将无助于实现迭代算法,但会最大限度地减少您使迭代器与STL期望兼容的努力......