假设我想在 C++ 中实现一个数据结构来存储有向图。由于 STL 容器,弧将存储在节点中。我希望用户能够以类似 STL 的方式迭代节点的弧。
我遇到的问题是我不想在 Node 类(实际上是一个抽象基类)中公开我将在具体类中实际使用的 STL 容器。因此,我不想让我的方法返回 std::list::iterator 或 std::vector::iterator ...
我试过这个:
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 的自定义迭代器的论文,但它没有帮助。我今天一定有点重... ;)