是指在使用迭代器遍历容器元素时,如果对容器进行了修改操作,可能会导致迭代器失效,即不能继续使用或引用该迭代器。 具体的迭代器失效规则如下: 1. 对于vector、deque和string等序列容...
1、插入操作(insert)和接合操作(splice)不会造成原有的list迭代器失效,这在vector中是不成立的,因为vector的插入操作可能造成记忆体重新配置,导致所有的迭代器全部失效。 2、list的删除操作(erase)也只有指向被删除元素的那个迭代器失效,其他迭代器不受影响。(list目前只发现这一种失效的情况) 关联容器 对于关联容器...
前面说过,此处大家可将迭代器暂时理解成类似于指针,迭代器失效即迭代器所指向的节点的无效,即该节点被删除了。因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代器失效的,只有在删除时才会失效,并且失效的只是指向被删除节点的迭代器,其他迭代器不会受到影响。 3、list的模拟实...
迭代器失效的原因是:因为 vetor、deque 使用了连续分配的内存,erase操作删除一个元素导致后面所有的元素都会向前移动一个位置,这些元素的地址发生了变化,所以当前位置到容器末尾元素的所有迭代器全部失效。 解决方法是利用erase方法可以返回下一个有效的 iterator,所以代码做如下修改即可: // 在这里想把大于2的元素都删...
我们知道迭代器失效指的就是迭代器指向了一块不属于它的空间,或者指向的空间已经被销毁了。这里list由于不像vector那样,vector的插入操作可能会引起扩容,从而导致迭代器失效,而list则不会,因为list的底层结构为带头结点的双向循环链表,因此在list中进行插入时是不会导致list的迭代 器失效的,只有在删除时才会失效,并且...
对于deque 在首部或尾部删除元素则只会使指向被删除元素的迭代器失效,任何其他位置的插入和删除操作将使指向该容器元素的 所有迭代器失效。 对于list 仅有指向被删除元素的迭代器失效。 对于(mulit)map ,(multi)set 仅有指向被删除元素的迭代器失效。
并且讲解list迭代器失效的特性 最后讲解迭代器的功能分类以及 算法库函数中谁能用谁不能用 STL标准库中的list是一个 带头双向循环链表 和vector不同,list没有支持[ ]访问 以及resize和reserve容量相关的函数 这是因为list不能随机访问数据 并且list的迭代器的底层明显不是指针了 ...
在deque容器首部或者尾部插入元素不会使得任何迭代器失效。 在其首部或尾部删除元素则只会使指向被删除元素的迭代器失效。 在deque容器的任何其他位置的插入和删除操作将使指向该容器元素的所有迭代器失效。 四、list 内部数据结构:双向环状链表 不能随机访问一个元素。
通过图片分析,list的排序比vector调用算法库中的排序效率低,甚至比先将list数据拷贝给vector,再调用算法库的排序的效率还要低。 三:迭代器 1:迭代器失效 erase迭代器失效 insert迭代器不失效 2:迭代器种类 单向迭代器,只能++,如单链表和哈希表。 双向迭代器,支持++和--,如双向循环链表 ...