关于迭代器失效的讨论

迭代器失效,有两个层面的意思,
1) 无法通过迭代器++,–操作遍历整个stl容器。记作: 第一层失效。
2) 无法通过迭代器存取迭代器所指向的内存。 记作: 第二层失效。
关于这个问题, 不同的容器对应的结果是不同的。
vector
vector是个连续内存存储的容器,如果vector容器的中间某个元素被删除或从中间插入一个元素, 有可能导致内存空间不够用而重新分配一块大的内存。
这个动作将导致先前获取的迭代器,,第一层和第二层均失效。
map
map内部是红黑树结构,当map中新插入或删除元素后,树的结构会相应的调整。
但是,通过先前的迭代器,仍然可以通过++可以遍历map。 能遍历到值>当前迭代器的节点。 (没有看具体stl内部实现,初步代码验证正确)
迭代器指向的用户数据内存始终有效。
list
同理map, 通过++只能遍历链表右侧的节点,迭代器指向的用户数据内存也始终有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值