在下列情况下,迭代器何时失效
这个问题在这里已经有了答案:
1-如果在矢量中删除第50个元素,则所有下一个元素将向上移动一个矢量,因为矢量是一个动态数组并且是连续的。 因此,第50个索引之前的迭代器将是有效的,大于或等于50的迭代器将在删除之后失效
正确。 (资源)
2 - 如果容器是一个列表(双链表),并且第50个索引被删除,那么只有第50个索引之后的迭代器会受到影响。
不正确。 只有指向第50个索引的迭代器失效(列表节点重新链接,不移动)(Source)
3 - 如果容器是deque,我不确定哪些迭代器会失效
“除非擦除元素位于容器的末端或开始处,否则所有迭代器和引用都将失效,在这种情况下,只有迭代器和对擦除元素的引用才会失效。” (资源)
4 - 如果容器是地图,我相信所有的迭代器都会失效。
不正确。 与std::list
相同的解释适用( std::map
是一个链接树)。 (资源)
你的问题有很多重复,并且一个简单的搜索会显示你所有的答案:
另请参见:
链接地址: http://www.djcxy.com/p/73347.html上一篇: When do Iterators in the following cases become invalidated
下一篇: Why does the same code run differently in Visual Studio and Dev