我创建了一个单独的链表,并为它创建了一个迭代器,但是当当前指向的元素从列表中删除时,我遇到了问题。我有一个名为list的类,在其中,我有一个名为iter的嵌套类。目前iter唯一的字段是* currentNode指针(它在构造函数的节点中传递)。
那么当它指向的元素被删除时,我该如何处理呢。我的第一个想法是我应该尝试在我的列表的remove()函数中处理它,但我不认为有可能/不知道如何从列表的角度来判断当前元素是否被指向由迭代器(迭代器的currentNode指针似乎不在基于编译器错误的类的范围内)。我的第二个想法是尝试从迭代器本身处理它,但我无法弄清楚如何开始这样做。
如果答案非常简单,我很抱歉。我无法在网上任何地方找到答案,这让我觉得它可能是,但我无法弄清楚如何处理这一点对我来说。谢谢!
答案 0 :(得分:1)
列表不需要了解迭代器或其内容。当迭代器从列表中删除其当前节点时,迭代器将失效。即使是大多数标准STL容器中的迭代器也表现出相同的行为。例如,如果查看std::list
,其erase(iterator)
方法将返回 new 迭代器,该迭代器表示节点后面的列表中的 next 节点去掉了。您可以在自己的remove()
方法中执行相同的操作。否则,remove()
必须更新迭代器以指向不同的节点,但这往往会违背迭代器通常的操作方式。
答案 1 :(得分:1)
您有2个选项。
std::shared_ptr
。这样,只要迭代器存在,就不会删除该值。即使您不使用该功能,也必须为此付出性能损失。此外,它可以被视为隐藏了一个错误。