c++ STL 迭代器失效问题

 我来答
jb...8@33sn.cc
2017-05-07
知道答主
回答量:75
采纳率:0%
帮助的人:14.8万
展开全部
迭代器失效,有两个层面的意思,
1) 无法通过迭代器++,--操作遍历整个stl容器。记作: 第一层失效。
2) 无法通过迭代器存取迭代器所指向的内存。 记作: 第二层失效。
关于这个问题, 不同的容器对应的结果是不同的。
vector
vector是个连续内存存储的容器,如果vector容器的中间某个元素被删除或从中间插入一个元素, 有可能导致内存空间不够用而重新分配一块大的内存。
这个动作将导致先前获取的迭代器,,第一层和第二层均失效。
map
map内部是红黑树结构,当map中新插入或删除元素后,树的结构会相应的调整。
但是,通过先前的迭代器,仍然可以通过++可以遍历map。 能遍历到值>当前迭代器的节点。 (没有看具体stl内部实现,初步代码验证正确)
迭代器指向的用户数据内存始终有效。
list
同理map, 通过++只能遍历链表右侧的节点,迭代器指向的用户数据内存也始终有效。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式