有向グラフを格納するためのデータ構造を C++ で実装したいとします。アークは、STL コンテナーのおかげでノードに格納されます。STL のような方法で、ユーザーがノードのアークを反復処理できるようにしたいと考えています。
私が抱えている問題は、具体的なクラスで実際に使用する STL コンテナーを Node クラス (実際には抽象基本クラスになる) で公開したくないということです。したがって、メソッドが 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 のカスタム イテレータに関するこの論文を見つけましたが、役に立ちませんでした。今日はちょっと重いかな…;)