1.STL之vector迭代器失效 std::vector是一个动态数组,当其大小或容量发生改变时,其内存可能被重新分配,从而导致已经存在的迭代器失效。以下是几种可能导致迭代器失效的情况: 1.插入或添加元素:使用push_back或insert在std::vector中插入元素可能导致所有的迭代器失效。这是因为,如果std::vector的当前容量不足以容纳...
迭代器失效的原因是:因为 vetor、deque 使用了连续分配的内存,erase操作删除一个元素导致后面所有的元素都会向前移动一个位置,这些元素的地址发生了变化,所以当前位置到容器末尾元素的所有迭代器全部失效。 解决方法是利用erase方法可以返回下一个有效的 iterator,所以代码做如下修改即可: // 在这里想把大于2的元素都删...
下面来分析三种不同内存存储方式下的迭代器失效情况: 1.连续内存空间式存储 2.链表式存储 3.红黑树式存储(底层仍为链表存储)一.连续空间式存储 vector deque首先要明白vector是顺序式容器,是连续存储空间的,如果有一块空间不能使用了,整块空间都需要重新分配。 那么vector中只要erase掉了pos位置的元素,>=pos的...
1、尾后插入:size < capacity时,首迭代器不失效尾迭代失效(未重新分配空间),size == capacity时, 所有迭代器均失效(需要重新分配空间)。 2、中间插入:中间插入:size < capacity时,首迭代器不失效但插入元素之后所有迭代器失效,size == capacity时,所有迭代器均失效。 删除元素: 尾后删除:只有尾迭代失效。 中...