假设我想在C++中实现一个数据结构来存储面向图。由于STL容器,圆弧将存储在节点中。我希望用户能够以类似STL的方式在节点的弧上迭代。
我遇到的问题是,我不想在Node类(实际上是一个抽象基类)中公开我将在具体类中实际使用的STL容器。因此,我不想让我的方法返回std::list::iterator或std::vector::迭代器。。。
我试过了:
class Arc;
typedef std::iterator<std::random_access_iterator_tag, Arc*> ArcIterator; // Wrong!
class Node {
public:
ArcIterator incomingArcsBegin() const {
return _incomingArcs.begin();
}
private:
std::vector<Arc*> _incomingArcs;
};
但这是不正确的,因为vector::const_iterator不能用于创建ArcIterator。那么这个ArcIterator是什么呢?
我找到了这篇关于STL的自定义迭代程序,但它没有帮助。我今天一定有点重…;)