Код: Выделить всё
for (Itterator=List.Begin(); Itterator!=List.End(); ++Itteratir)
Код: Выделить всё
for (Itterator=List.Begin(); (bool)Itterator; ++Itteratir)
А если иттератор реверсивен, то как его запускать с конца? Как синтаксически выглядит перебор реверсивным иттератором назад? Оператором декремента? А сравнивать с чем? Как сюда:
прикрутить исключение при разыменовании иттератора терминального элемента?Код: Выделить всё
class TSimpleList { public: class Node { public: Node(): Prev(nullptr), Next(nullptr) { } Node *Prev; Node *Next; }; class Iterator { public: Iterator() : m_node(nullptr) { } Iterator(Node *n) { m_node = n; } void operator++() { if (m_node != nullptr) { m_node = m_node->Next; } } bool operator!=(const Iterator& it) { return (m_node != it.m_node); } private: Node *m_node; }; TSimpleList() : m_pBegin(&m_end) { } ~TSimpleList() { // удаление элементов списка while (m_end.Prev != nullptr) { Node *Last = m_end.Prev; m_end.Prev = Last->Prev; delete Last; } } Iterator Begin() { return m_pBegin; } Iterator End() { return &m_end; } void Add() { if (&m_end != m_pBegin) { Node *it = new Node(); Node *Last = m_end.Prev; Last->Next = it; m_end.Prev = it; it->Next = &m_end; } else { m_pBegin = new Node(); m_pBegin->Next = &m_end; m_end.Prev = m_pBegin; } } private: Node m_end; Node* m_pBegin; }; int tmain() { TSimpleList sl; TSimpleList::Iterator it; sl.Add(); sl.Add(); sl.Add(); for (it = sl.Begin(); it != sl.End(); ++it) { _puttch('.'); } _gettch(); return 0; }