STL学习笔记14— —迭代器

来源:互联网 发布:360数据恢复精灵 编辑:程序博客网 时间:2024/05/19 10:10

头文件

所有的容器都定义了自己的迭代器类型,所以一般情况下,不需要再自己添加迭代器头文件。但是如果要使用一些特殊的迭代器,如反向迭代器,或者一些迭代器辅助函数,那么就需要添加头文件<iterator>。

迭代器类型

类型能力提供者输入迭代器一次向前读取istream输出迭代器向前写入ostream,inserter前向迭代器向前读取和写入forward list,unordered containers双向迭代器向前和向后的读取和写入list,set,multiset,map,multimap随机存取迭代器随机读取和写入array,vector,deque,string,C-style array

这里写图片描述

迭代器运算中,++iter比iter++更快,所以最好选用++iter

输入迭代器

*iter //读取实际元素iter ->member //读取实际元素的成员++iter //向前步进(返回新位置)iter++ //向前步进(返回旧位置)iter1 == iter2 //判断两个迭代器是否相等iter1 != iter2 //判断两个迭代器是否不等TYPE(iter) //copy构造函数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

输出迭代器

*iter = value  //将数值写到迭代器所指位置++iter //向前步进(返回新位置)iter++ //向前步进(返回旧位置)TYPE(iter) //copy构造函数
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

前向迭代器

*iter //存取实际元素iter ->member //存取实际元素的成员++iter //向前步进(返回新位置)iter++ //向前步进(返回旧位置)iter1 == iter2 //判断两个迭代器是否相等iter1 != iter2 //判断两个迭代器是否不等TYPE() //default构造函数TYPE(iter) //copy构造函数iter = iter2 //赋值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

双向迭代器

*iter //存取实际元素iter ->member //存取实际元素的成员++iter //向前步进(返回新位置)iter++ //向前步进(返回旧位置)--iter //向后步进(返回新位置)iter-- //向后步进(返回旧位置)iter1 == iter2 //判断两个迭代器是否相等iter1 != iter2 //判断两个迭代器是否不等TYPE() //default构造函数TYPE(iter) //copy构造函数iter = iter2 //赋值
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

随机存取迭代器

iter[n] //存取索引位置为n的元素iter+=n //向前跳n个元素(若n为负,则向后跳)iter-=n //向后跳n个元素(若n为负,则向前跳)iter+n //传回iter之后的第n个元素n+iter //传回iter之后的第n个元素iter-n //传回iter之前的第n个元素iter1-iter2 //传回iter1和iter2之间的距离iter1<iter2 //判断iter1是否在iter2之前iter1>iter2 //判断iter1是否在iter2之后iter1<=iter2 //判断iter1是否不在iter2之后iter1>=iter2 //判断iter1是否不在iter2之前
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

迭代器辅助函数

advance() //使迭代器前进给定的距离 distance() //返回两个迭代器之间的距离 next() //使迭代器前进一步 prev() //使迭代器后退一步 begin() //返回指向容器首元素的迭代器end() //返回指向容器尾元素的迭代器
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
原创粉丝点击