gpt4 book ai didi

c++ - 使用 Visitor 时更改容器

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:02:20 26 4
gpt4 key购买 nike

我使用类似 STL 的迭代器在 C++ 中实现了访问者模式,用于存储访问者在容器中的当前位置。现在我想在迭代容器时更改容器,我特别感兴趣的是从容器中删除项目,即使是我当前正在访问的项目。

现在显然这将使 Visitors 内部迭代器无效,因为它恰好指向该项目。目前,我将所有迭代器的列表存储在容器中,并在列表中添加或删除任何内容时立即更新它们。所以在某种程度上,这类似于应用于迭代器(作为 Observer)和列表(作为 Observable)的观察者模式。

或者,我考虑过让 visitor() 方法向访问者返回一些关于当前项目发生了什么以及如何继续迭代的提示,但这听起来也不是一个好主意,因为 visit() 实现不应该真正关心找到下一个项目。

因此,我的问题是:保持访问者工作的最佳方式是什么,即使项目被添加到容器或从容器中移除也是如此。

问候, 弗洛里安

更新:有一个访问者在容器上运行,但在 visit() 方法内部,可以在同一个容器上使用任意数量的附加迭代器。我希望访问者继续使用容器中的剩余项目,即使我们从调用 visit() 返回后容器中的任何项目已被删除。

最佳答案

在遍历期间改变容器时,迭代器充其量是危险的。使用索引并向后走是最安全的。

关于c++ - 使用 Visitor 时更改容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2644133/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com