C++ 中vector和list是我们常用的容器,在容器配合算法的时候,就用到了迭代器。
这样提高了代码的可读性,也配合了STL中的算法。但是在容器中使用迭代器时候会发生迭代器失效问题,所以我们就得注意。
首先我们看vector的迭代器失效问题
在vector中迭代器失效发生在insert和erase中。
我们先看insert,在vector中插入元素,插入元素后当发现开辟的空间不够了,就会开辟更大的空间来进行拷贝数据,这个时候原来的start、finish、endofstorage都会发生变化,所以要插入位置已经变化,而传过来的位置还是原来的位置,就会出现插入越界。
我们来画图解释
所以要更新pos的位置。
怎么处理?
我们在插入前计算出相对与start的相对距离,那么当插入时候我们用计算的距离还原pos进行插入
Iterator Insert(Iterator position, const T& value)
{
assert(position < End() && position >= Begin());
size_t off = position -