[英]How to write standard C++ iterator?
我有以下简单的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
,但我发现它令人困惑。 也许有人可以提示如何在这种情况下使用它?
如果您不想使用boost,请查看迭代器必须提供的内容: STL文档 。
否则,您可以使用boost迭代器库 。 请参阅iterator_facade教程 ,该教程非常接近您的要求。
创建内部有两个迭代器的类:一个在地图上,另一个在集合上。
每个++都应用于设置迭代器。 当它到达结尾时,增加map迭代器并重新初始化set iterator。
您也可以使用boost :: iterator_facade - 它将无助于实现迭代算法,但会最大限度地减少您使迭代器与STL期望兼容的努力......
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.