在下列情况下,迭代器何时失效

这个问题在这里已经有了答案:

  • 迭代器失效规则4个答案

  • 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