私は反復したいタイプ "T"のオブジェクトのコレクションを持っています。タイプ「T」の対象は、2つの重要なプロパティがあります。C++用のカスタムイテレータ関数
int r; // row number
int c; // column number
私は私がコレクションのすべての要素を反復処理することを可能にする反復子を定義したいと思います。
これは、使用して行うことができます。
std::vector<T> v;
for(std::vector<T>::iterator it = v.begin(); it != v.end(); ++it) {
....
}
しかし、私は1つの以上の特性を持っているイテレータをしたいと思います。私は、この関数を呼び出すと、V ER + 1 = ec.rとECがで指さ現在の要素であるEC = ec.c、の要素「e」を返す必要があります
it.nextrow()
を呼び出すことができるようにしたいと思いますイテレータ私。 it.nextrow()を呼び出すと、columnが同じである行が1つ増えた要素へのポインタが返されます。それが理にかなってほしい。
私は先進的なC++の概念をかなり新しくしているので、これが機能するためには何が必要なのかよくわかりません。誰か助けてくれますか?
データの構造をより詳しく説明できますか?私は 'std :: vector'と 'int r、c'の関係を見ていません。各行に列の値の集まりがある行オブジェクトのベクトルを持っていますか、または行のすべての列がベクトル内で次々に来るフラットなレイアウトを持っていますか? –
grek40