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