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


Anmelden zum Antworten