Библиотеки: Связанный список.

 

Связанный список.:

Краткое описание

Автор: Vladimir Simakov

 

Зачем было плодить новые грабли на основе той же ошибочной концепции, что и поделка MQ.  Хранить итераторы в самих объектах и изменять их - это абсурд,  нарушение инкапсуляции, приводящее к непредсказуемым последствиям, если объект окажется помещённым в нескольких контейнерах.

Для этих целей должен служить вспомогательный объект-контейнер ListNode, создаваемый списком.  А сами клиентские объекты трогать нельзя.  Можно этот CObject переименовать в CListNode, тогда всё встанет на свои места.  Ну и добавить в нём виртуальный метод:

virtual CObject* GetObject() const { return &this; }
 
Alexey Navoykov:

Зачем было плодить новые грабли на основе той же ошибочной концепции, что и поделка MQ.  Хранить итераторы в самих объектах и изменять их - это абсурд,  нарушение инкапсуляции, приводящее к непредсказуемым последствиям, если объект окажется помещённым в нескольких контейнерах.

Для этих целей должен служить вспомогательный объект-контейнер ListNode, создаваемый списком.  А сами клиентские объекты трогать нельзя.  Можно этот CObject переименовать в CListNode, тогда всё встанет на свои места.  Ну и добавить в нём виртуальный метод:

Согласен. Уже сделал CIterator. Этот вариант уже в топке.
 
Кому интересно.
Файлы:
CList.mqh  7 kb
CIterator.mqh  3 kb