Bonjour,
J'aimerais créer mes propres iterators sur une Collection. Un peu sur le modèle STL mais le plus simple possible.
Je ne suis pas autorisé à utilisé boost et Iterator Facade. Voici un code explicatif:
Le problème est sur le end(). En effet le parcours se passe normalement sauf que je manque le dernier élément.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 class Element:private myNode { }; class Collection:private myStruct { public: class Iterator { private: Element * m_ptr; public: bool operator ==()const; bool operator !=()const; Element &operator*()const; Element *operator->() const; Iterator& operator ++(); Iterator operator ++(int); } Iterator begin()const { MyStruct::getFirst(); } Iterator end()const { MyStruct::getLast(); } }; static void test() { Collection c; c.insert(Element()); /*...*/ Collection::Iterator it; for(it=c.begin();it!=c.end();it++) { } }
Et pour cause: mon end() renvoie en fait un iterator sur le dernier élément alors que pour les iterators de la STL end() renvoie un iterator de fin de séquence après le dernier élément. Je ne vois pas comment faire un end() de cette façon.
MyStruct peut être assimiler à un arbre binaire, et je ne vois pas ici comment lui faire renvoyer ce end() et je préfèrerai si possible le gérer dans la Collection.
Des idées là dessus ?
Merci.
Partager