Как создать последний итератор? - PullRequest
3 голосов
/ 22 января 2012

Я создал бинарную древовидную структуру для хранения ограниченной иерархии томов, чтобы упростить ее использование (и сделать ее более безопасной). Я создал два итератора, дополняющих ее: первый в ширину и первый в глубину.

Итератор в ширину по сути является оберткой для базового QList. Но я застрял на итераторе глубины (только двунаправленный), я могу справиться с фактической итерацией вокруг дерева, я просто не знаю, как создать итератор с окончанием конца.

Я не могу просто использовать QList::end(), потому что нет гарантии, что самый правый узел самого низкого уровня также является самым правым узлом всего дерева. Я неохотно делаю «поддельный» узел BVH, который можно протестировать, потому что это потребует большого изменения кода (и, возможно, издержек), чтобы различные механизмы управления узлами игнорировали поддельный узел и отключили большую часть автоматизации построения дерева (например, родителю поддельного узла нужно будет сказать, что это лист). Но если это единственный путь - тогда это единственный путь.

Ответы [ 2 ]

0 голосов
/ 22 января 2012

Разве вы не можете просто использовать null или что-то подобное в качестве конца? Это, по крайней мере, то, что я ожидал, например. для структуры связанного списка.

0 голосов
/ 22 января 2012

Кратко рассмотрев qlist.h, выяснилось, что вы не сможете использовать один и тот же end () для обоих типов итераций.Но это нормально - вы можете использовать нулевой указатель, статический фиктивный или другие методы, чтобы сделать итератор end () для вашего второго метода итерации.Я не понимаю, почему это должно повлиять на огромное количество другого кода (большая часть которого должна просто ссылаться на end (), не зная деталей его реализации).

...