Lect17
.pdfПримеритераторадля ассоциативногомассива
class assoc_iterator {
const assoc* cs; |
// массив assoc |
int i; |
// текущий индекс |
public: |
|
assoc_iterator(const assoc& s) { cs = &s; i = 0; } assoc::pair* operator()() {
return (i<cs->free)? &cs->vec[i++] : 0;
}
};
Пример использования. assoc vec(512);
...
assoc_iterator next(vec); assoc::pair* p;
while ( p = next() ) {
cout << p->name << ": " << p->val << '\n';
}
21
Примеритераторадля связанногосписка
class LinkedListIterator;
class LinkedListImpl { private:
ListElement * head; ListElement * tail; int count;
protected:
public:void FreeMem(); LinkedListImpl();
LinkedListImpl(const LinkedListImpl &src); void Clear();
void AddElement(ListElement * element);
void InsertElement(ListElement * element, int pos); void RemoveElement(int pos);
LinkedListIterator begin();
LinkedListIterator end();
};
int GetCount() const { return count; } friend class LinkedListIterator;
22
Примеритераторадля
односвязногосписка
class LinkedListIterator { private:
ListElement *curr; int pos;
public:
LinkedListIterator(LinkedListImpl * list); LinkedListIterator& operator++(int); ListElement& operator*();
bool operator == (const LinkedListIterator& i); bool operator != (const LinkedListIterator& i); int GetPos() const { return pos; }
};
Использование:
for (LinkedListIterator it=list.begin(); it!=list.end(); it++) cout << *it;
23
Спасибозавнимание!
24