如何在BFS(C++)期间删除队列中的对象
How to delete an obj in queue during BFS (C++)?
我正在编写一个包含BFS的程序。它将在每个节点都包含一些属性的树上执行BFS。我用链表来表示树。我的代码很大,我不能在这里发布。这是我所做工作的总结:
在BFS期间,我使用节点类型的队列。
queue <TreeNodes*> my_queue;
和通常的BFS一样,我在队列中推送和弹出节点。在BFS期间,我需要更新树,这意味着我可能会删除一些节点并更新树。
在BFS期间,我出现了分段故障,我知道它的原因,但不知道如何解决它
假设在BFS期间,我将节点"x"推入队列。然后在接下来的迭代中,当我弹出节点"y"时,我可能会删除节点"x",而它仍在队列中。一旦我弹出"x",这就成了一个问题。
最初,我想如果通过树中的指针删除这个节点,它也会自动将其从队列中删除。但似乎一旦我把一个节点推到队列中,它就会推送它的副本。我不确定如何才能真正从队列中删除它,或者至少当我从树中删除它时,它就会变为空。因为它实际上不是空的,指向任何地方,并且有一些随机数作为它的属性。
我不知道我应该搜索什么,所以我在这里问它。
一种可能性是在树中使用shared_ptr
s,在队列中使用weak_ptr
s。使用它们在某种程度上是不平凡的,但基本思想是shared_ptr
拥有它所指向的东西的所有权,而weak_ptr
能够观察相同的东西——但如果shared_ptr
处理了对象,weak_ptr
会让你知道你试图查看的东西已经消失,而不是试图使用一个现在已经过时的指针。
相关文章:
- 从队列中删除第一个元素C++
- 如何在BFS(C++)期间删除队列中的对象
- 交换优先级队列时尝试引用已删除的函数错误
- 如何删除在没有STL的队列中存储在数组中的第一个字符串元素
- GetMessage/PeekMessage - 删除消息队列中的所有消息
- 队列类中的非空删除成员函数
- 队列的删除功能
- 从队列中编辑元素而不将其删除
- 在队列中,插入和删除后,被删除的元素也会出现在输出中.为什么
- 使用 BST 的优先级队列 -- 删除最大不起作用
- 事件在发布到Qt中的窗口时从队列中删除
- 从队列中删除第一个元素
- 删除队列类中的节点的过程
- 如何删除 STXXL 优先级队列
- 从 X11 队列中删除额外的公开消息
- Windows - 从消息队列中删除与键盘相关的消息
- 复制STL:删除元素、用户定义函数作为参数和事件队列
- 是否可以按值删除队列元素
- 确定删除并发队列的安全性
- 从空队列中删除元素