码迷,mamicode.com
首页 > 其他好文 > 详细

迭代器

时间:2020-09-12 21:53:04      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:swap   tab   priority   const   技术   双向   ptr   rev   支持   

 

容器迭代器 :

正向普通迭代器 :::iterator

正向常迭代器    :::const_iterator

反向迭代器       :::reverse_iterator    //  rbegin :最后一个迭代器的表示     rend : 第一个迭代器的前驱位置    遍历 rbegin ----> rend 使用++

反向常量迭代器 : ::const_reverse_iterator 

 

常量迭代器是基类,普通迭代器是派生类,他们是继承关系

 容器的一般迭代器

 

容器迭代器功能
vector 随机访问
deque 随机访问
list 双向
set / multiset 双向
map / multimap 双向
stack 不支持迭代器
queue 不支持迭代器
priority_queue 不支持迭代器

 

迭代器的辅助函数 :#include<algorithm>

  • advance(p, n):使迭代器p向后移动 n个元素
  • distance(p, q):计算两个迭代器之间的距离,即迭代器 p 经过多少次 + + 操作后和迭代器 q 相等。如果调用时 p 已经指向 q 的后面,则这个函数会陷入死循环
  • iter_swap(p, q):用于交换两个迭代器 p、q 指向的值

 

迭代器失效 :

迭代器的实现,一般是容器中嵌套类,在迭代器这个类中存在一个指针,那么这个指针指向了容器的某个位置

迭代器失效是存在了insert 或者 erase 操作,会导致迭代器失效,那么这些容器失效情况有哪些?

 

 

 

技术图片

 

迭代器失效原理:

在容器中嵌套一个迭代器类型,以vecto为例,这个类型一般有两个成员变量 :T* ptr(指向容器中某一个元素)   ,vector<T,Alloc> *pVec(指向一个容器的指针);

同时有一个链表来表示,你操作过的所有迭代器,那么当你进行插入或者删除等操作时,会有一个检查操作,也就是遍历链表,在失效空间范围内,就将这个迭代器的pVe指针置为nullptr

 

迭代器

标签:swap   tab   priority   const   技术   双向   ptr   rev   支持   

原文地址:https://www.cnblogs.com/lc-bk/p/13594243.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!