假设我有一个列表,其中没有添加或删除新节点。但是,节点可能会被拖曳。
保存迭代器,指向列表中的节点并在以后任意时间访问它是否安全?
编辑(后续问题): list :: splice()的文档说它从参数列表中删除了元素。这是否意味着如果我使用与函数的参数相同的列表调用splice,那么现有的迭代器将被无效?
答案 0 :(得分:25)
是。
除非他们指向(隐喻地说)的项目从列表中删除,否则将迭代到列表中的标准被授予者将不会失效。
从此页面:http://www.sgi.com/tech/stl/List.html
Lists have the important property that insertion and splicing do not
invalidate iterators to list elements, and that even removal invalidates
only the iterators that point to the elements that are removed.
答案 1 :(得分:1)
是的,std::list
迭代器只是指向节点的指针。您可以在列表中插入,删除(其他节点)和重新排列节点,并且迭代器不会失效。