我使用类似 STL 的迭代器在 C++ 中实现了访问者模式,用于存储访问者在容器中的当前位置。现在我想在迭代容器时更改容器,我对从容器中删除项目特别感兴趣,即使是我目前正在访问的项目。
现在显然这将使访客内部迭代器无效,因为它正好指向这个项目。目前,我将所有迭代器的列表存储在容器中并更新它们,只要将任何内容添加到列表中或从列表中删除。所以在某种程度上,这类似于应用于迭代器(作为 Observer)和列表(作为 Observable)的观察者模式。
或者,我考虑让 visitor() 方法向访问者返回一些关于当前项目发生了什么以及如何进行迭代的提示,但这听起来也不是一个好主意,因为 visit() 实现不应该真的很关心找到下一个项目。
所以,我的问题是:让访客继续工作的最佳方式是什么,即使物品被添加到容器中或从容器中移除。
问候,弗洛里安
更新:有一个访问者在容器上运行,但在 visit() 方法内部,可以在同一个容器上使用任意数量的附加迭代器。我希望访问者继续使用容器中的剩余项目,即使我们从调用 visit() 中返回,其中容器中的任何项目都被删除了。