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 |