Iterator selber basteln?
-
Hi,
ich habe mir eine Template-Behälter-Klasse gebastelt, deren Innenleben im Wesentlichen ein Feld vom Template-typ enthält:
template <class T> class Vector { ... private: T* _data; ... }
Meine Frage ist einfach: Wie spendiere ich dieser Klasse jetzt einen Iterator, um die STL-Algorithmen für diese Klasse benutzen zu können?
Grüße, LIBS
-
Hallo,
da ein Zeiger ein (Randmom-Access) Iterator ist, kannst du hier z.B. folgendes machen:template <class T> class Vector { public: typedef T* iterator; typedef const T* const_iterator; iterator begin() {return _data;} iterator end() {return _data + _size;} ... private: T* _data; };
Wenn du mehr Kontrolle haben willst, musst du dir überlegen, welche Iterator-Kategorie du unterstützen willst und dann eine Klasse implementieren, die alle von der Kategorie geforderten Methoden (+ typedefs) implementiert.
Noch einfacher geht es sicher mit der boost-Iterator-Adaptor Lib:
http://www.boost.org/libs/utility/iterator_adaptors.htm