Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Iterator::operator++ problem

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
10.01.2007, 14:35 Uhr
~blacksh33p
Gast


hallo, hab da ein problem.

geht drum, klasse array mit nem iter drin. so problem

array muh;
muh.push_back(X)
array::_iter it = muh.begin(); // it zeigt nun auf x

++it;
assert(it == NULL); // it == muh.end()
// so, da aber it das letze ele ist müsste it nun array.end() bzw null sein
jedoch ka wie ich in der iter klasse prüfen kann ob die adresse noch im array liegt. hier der code



C++:

template <typename T>
class Array
{
public:
    class _Iter
    {
    private:
        T* pElm;
        
    public:
        friend class Array;
        _Iter(T* a=0) { pElm=a; };
        virtual ~_Iter() {};

        T& operator*() { return *(this->pElm); }
        _Iter& operator++() {  if() pElm++; else pElm=0; return *this;}
                // pElm+=sizeof(T)/4; das ist die übeltäterzeile
        _Iter operator++(int) { _Iter tmp= *this; ++(*this); return tmp;}
        _Iter& operator--() { pElm -=sizeof(T)/4; return *this;}
        _Iter operator--(int) { _Iter tmp= *this; --(*this); return tmp;}
        bool operator==(const _Iter& a)const { return pElm==a.pElm; }
        bool operator!=(const _Iter& a)const { return pElm!=a.pElm; }
        T& operator[](const int a) { return *(pElm + a); }
    };
    typedef _Iter iterator;

    _Iter& erase(_Iter& a)
    {
        int i = find(*a);
        erase(i);
        if(i==elements()) {a.pElm=NULL; return a;};
        a.pElm= &pArr[i];
        return a;
    }
    _Iter& erase(_Iter& a, _Iter& b)
    {
        int i1 = find(*a);
        int i2 = find(*b);
        T tmp=*b;
        if (i2<=0) {a.pElm=NULL; return a;}
        for(; pArr[i1]!=tmp; )
            erase(i1);
        a.pElm=&pArr[i1];
        return a;
    };
    _Iter begin() { return _Iter(pArr); }
    _Iter end() { return _Iter(); }
    _Iter insert(_Iter stelle, const T wert)
    {
        int s=0;
        for (_Iter m=begin() ; stelle!=m; m++)
        {
        s++;
        }
        push_back(pArr[arrElements-1]);
        for(int i=arrElements-2; i>s; i--)
        {
            if(i>0)
                at(i) = at(i-1);
        }
        at(s)=*stelle;
        return stelle;
    }



    Array(int arraySize=0, T value=0);
    Array(const Array& toCopy);
    Array(T* sourceArr, int size);
    ~Array(void);
    int size() const { return arrSize; }
    int elements() const { return arrElements; }
    T get(int index) const;
    bool exists(const T& a) const { for(int i = 0; i<arrElements; i++) if(pArr[i]==a) return true; return false; }
    T front()const {return get(0); }
    T back()const {return get(arrElements-1); }
    void pop_back() { erase(arrElements-1);  }
    void pop_front() { erase(0); }
    void show() const;
    void clear();
    bool empty() { return (arrElements==0)?true:false; }
    void push_back(T value);
    void erase(const int index);
    T& at(const int index);
    int find(const T value) const;
    void sortGreatestFirst(int begin, int end);
    T& Array::operator[] (int i);
private:
    int arrSize;
    int arrElements;
    T* pArr;
};




hm hoffe ihr könnt mir dabei helfen.. grübel schon stunden
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
10.01.2007, 14:39 Uhr
~blacksh33p
Gast


fehler gefunden^^^blöder mist...


C++:
bool operator==(const T& b) const { return pElm==b; }




die hat gefehlt... klar dass die adresse vom it nie null wird, da er ja existiert aber die adresse von dem ding auf de iter zeigt war ja gemeint^^.

trotzdem danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
10.01.2007, 14:44 Uhr
~blacksh33p
Gast


... warn fehler aber nit der den ich gemeint hab...
2. post ignorieren
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
10.01.2007, 14:49 Uhr
Th



Gib deinem Iterator im Konstruktor eine konstante Referenz auf dein Array mit, dann kann der ++ operator die Größe (size) abfragen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
10.01.2007, 15:19 Uhr
~blacksh33p
Gast


ah ) super idee danke klappt
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
10.01.2007, 16:10 Uhr
~blacksh33p
Gast


idee jut, aber leider nit möglich, da des ding sich dymnamisch ausbreitet und die "new[size]" nicht ungebeding der den elementen entspricht. hab nu einfach const ref auf die anzahl de vorhandenen eles mitgegeben. tuts auch, aber trotzdem dank deiner idee )
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: