ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C++迭代器失效的几种情况

2022-05-16 23:01:30  阅读:222  来源: 互联网

标签:容器 结点 迭代 删除 元素 C++ 失效


1. 对于序列型容器:vector, deque

  • 删除当前元素:从当前位置到之后全部位置迭代器失效;(可以用 it=res.erase(it); 来实现迭代器的更新追踪)
  • 添加一个元素:当添加元素后,导致了容器扩容的操作,则全部迭代器失效;(可以用 it=res.push(it);)
  • 插入一个元素:当添加的元素在首尾位置以外,所有迭代器均失效;(在首位添加元素会导致迭代器失效,但是指针和引用不会失效;)(在首位或者尾位删除元素会导致被删除元素的迭代器失效;)

2. 对于关联型容器:map, set

  • 删除当前的元素,仅仅会使当前的迭代器失效,删除一个结点不会对其他结点造成影响。(map是关联容器,以红黑树或者平衡二叉树组织数据,虽然删除了一个元素,整棵树也会调整,以符合红黑树或者二叉树的规范,但是单个结点在内存中的地址没有变化,变化的是各个结点之间的指向关系)

3. 对于链表型容器:list

  • 删除运算使指向删除位置的迭代器失效,不会使其他迭代器失效。

标签:容器,结点,迭代,删除,元素,C++,失效
来源: https://www.cnblogs.com/siu-miner/p/16278971.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有