reverse_iterator_template



  • Ich will ein reverse_iterator_template bauen (z.B. int foo[42]; -> reverse_iterator_template<int>(foo[41]);), aber der Code geht nicht: ich bin mir bei den Rückgabetypen nicht sicher, was da hin soll. Im Prinzip soll ein reverse_iterator_template<int> sich wie ein int* verhalten (bloß bei ++ -- machen...)

    template<typename T> class reverse_iterator_template {
            T* p;
        public:
            inline reverse_iterator_template() {}
            inline reverse_iterator_template(T* d) : p(d) {}
            inline reverse_iterator_template& operator++ () {return --p;}
            inline reverse_iterator_template& operator-- () {return ++p;}
            inline reverse_iterator_template operator++ (int) {reverse_iterator_template t(*this); --p; return t;}
            inline reverse_iterator_template operator-- (int) {reverse_iterator_template t(*this); ++p; return t;}
            inline operator* () {return *p;}
        };
    


  • ich hab jetzt das:

    template<typename T> class iterator_template {
            T* p;
        public:
            inline iterator_template() {}
            inline iterator_template(T* d) : p(d) {}
            inline iterator_template operator++ () {++p return *this;}
            inline iterator_template operator-- () {--p; return *this;}
            inline iterator_template operator++ (int) {iterator_template t(*this); ++p; return t;}
            inline iterator_template operator-- (int) {iterator_template t(*this); --p; return t;}
            friend inline bool operator== (iterator_template a, iterator_template b) { return a.p == b.p; }
            friend inline bool operator!= (iterator_template a, iterator_template b) { return a.p != b.p; }
            friend inline bool operator< (iterator_template a, iterator_template b) { return a.p < b.p; }
            friend inline bool operator> (iterator_template a, iterator_template b) { return a.p > b.p; }
            friend inline bool operator<= (iterator_template a, iterator_template b) { return a.p <= b.p; }
            friend inline bool operator>= (iterator_template a, iterator_template b) { return a.p >= b.p; }
            inline T operator* () {return *p;}
        };
    
        template<typename T> class reverse_iterator_template : public iterator_template {
            T* p;
        public:
            /*inline reverse_iterator_template() {}
            inline reverse_iterator_template(T* d) : p(d) {}*/
            inline reverse_iterator_template operator++ () {--p; return *this;}
            inline reverse_iterator_template operator-- () {++p return *this;}
            inline reverse_iterator_template operator++ (int) {reverse_iterator_template t(*this); --p; return t;}
            inline reverse_iterator_template operator-- (int) {reverse_iterator_template t(*this); ++p; return t;}
            //inline T operator* () {return *p;}
        };
    

    nimmer noch nix 😞



  • soory muss so heißen

    inline T& operator* () {return *p;}
    


  • jetzt gehts! sieht aber nicht sehr sauber aus, oder?

    template<typename T> class iterator_template {
        private:
            T* p;
        public:
            inline iterator_template() {}
            inline iterator_template(T* d) : p(d) {}
            inline iterator_template operator++ () {++p; return *this;}
            inline iterator_template operator-- () {--p; return *this;}
            inline iterator_template operator++ (int) {iterator_template t(*this); ++p; return t;}
            inline iterator_template operator-- (int) {iterator_template t(*this); --p; return t;}
            friend inline bool operator== (iterator_template a, iterator_template b) { return a.p == b.p; }
            friend inline bool operator!= (iterator_template a, iterator_template b) { return a.p != b.p; }
            friend inline bool operator< (iterator_template a, iterator_template b) { return a.p < b.p; }
            friend inline bool operator> (iterator_template a, iterator_template b) { return a.p > b.p; }
            friend inline bool operator<= (iterator_template a, iterator_template b) { return a.p <= b.p; }
            friend inline bool operator>= (iterator_template a, iterator_template b) { return a.p >= b.p; }
            inline T& operator* () {return *p;}
        };
    
        template<typename T> class reverse_iterator_template {
        private:
            T* p;
        public:
            inline reverse_iterator_template() {}
            inline reverse_iterator_template(T* d) : p(d) {}
            inline reverse_iterator_template operator++ () {--p; return *this;}
            inline reverse_iterator_template operator-- () {++p return *this;}
            inline reverse_iterator_template operator++ (int) {reverse_iterator_template t(*this); --p; return t;}
            inline reverse_iterator_template operator-- (int) {reverse_iterator_template t(*this); ++p; return t;}
            friend inline bool operator== (reverse_iterator_template a, reverse_iterator_template b) { return a.p == b.p; }
            friend inline bool operator!= (reverse_iterator_template a, reverse_iterator_template b) { return a.p != b.p; }
            friend inline bool operator< (reverse_iterator_template a, reverse_iterator_template b) { return a.p < b.p; }
            friend inline bool operator> (reverse_iterator_template a, reverse_iterator_template b) { return a.p > b.p; }
            friend inline bool operator<= (reverse_iterator_template a, reverse_iterator_template b) { return a.p <= b.p; }
            friend inline bool operator>= (reverse_iterator_template a, reverse_iterator_template b) { return a.p >= b.p; }
            inline T& operator* () {return *p;}
        };
    


  • Hallo,
    dir ist aber bekannt, dass es bereits einen std::reverse_iterator-Template gibt, oder?



  • Original erstellt von HumeSikkins:
    Hallo,
    dir ist aber bekannt, dass es bereits einen std::reverse_iterator-Template gibt, oder?

    😮 WAS? NEIN! In welchem Header? Naja, hab wenigstens was daraus gelernt 😉



  • In welchem Header?

    <iterator>


Anmelden zum Antworten