C++中STL中vector和list的迭代器失效问题

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 - 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值