人生的过程,不断学习、不断向前迈进的过程

顺序容器迭代器的失效

    一般说来,会修改容器的内在状态或移动容器内的元素的一些容器操作,会使所有指向被移动的元素的迭代器失效,也可能同时使其他迭代器失效。使用无效迭代器是没有定义的,可能会导致与悬垂指针相同的问题。

    对于vector容器,当我们在容器中添加元素时,因为可能会导致整个容器的重新加载,这样的话,该容器涉及的所有迭代器都会失效。即使需要重新加载整个容器,指向新插入元素后面的那个元素的迭代器也会失效。

    而对于deque容器,在其首部或尾部插入元素不会使任何迭代器失效,而在首部或尾部删除元素则只会使指向被删除元素的迭代器失效。在deque容器的其他位置的插入和删除操作将使指向该容器元素的所有迭代器都失效。

    erase、pop_front和pop_back函数会使指向被删除元素的所有迭代器失效。但swap虽然可以交换两个容器内的所有元素,但是该操作不会删除或插入任何元素,而且保证在常量时间内实现交换。由于容器内没有移动任何元素,因此迭代器不会失效。

    总的说来,任何insert和push操作都可能导致迭代器失效。当编写循环元素插入到vector或deque容器中时,程序必须确保迭代器在每次循环后都得到更新。

没有评论:

发表评论