Я реализовал шаблон посетителя на C++, используя итератор, подобный STL, для хранения текущей позиции посетителя в контейнере. Теперь я хотел бы изменить контейнер, пока я перебираю его, и меня особенно интересует удаление элементов из контейнера, даже того, который я сейчас посещаю.
Теперь, очевидно, это сделает недействительным внутренний итератор Посетителей, потому что он указывал именно на этот элемент. В настоящее время я храню список всех итераторов в контейнере и обновляю их, как только что-то добавляется в список или удаляется из него. Таким образом, это похоже на шаблон Observer, применяемый к итератору (как Observer) и списку (как Observable).
В качестве альтернативы я подумал о том, чтобы методы visitor() возвращали посетителю некоторую подсказку о том, что произошло с текущим элементом и как продолжить итерацию, но это тоже не звучит как хорошая идея, потому что реализация visit() не должна действительно заботиться о поиске следующего элемента.
Итак, мой вопрос: как лучше всего поддерживать работу посетителя, даже когда элементы добавляются в контейнер или удаляются из него.
С уважением, Флориан
Обновление: над контейнером работает один посетитель, но внутри метода visit() может использоваться любое количество дополнительных итераторов для одного и того же контейнера. Я хочу, чтобы посетитель продолжал работать с оставшимися элементами в контейнере даже после того, как мы вернулись из вызова visit(), в котором какой-либо из элементов в контейнере был удален.