注意问题4是个判断题,答案是错!!!

因为根据ppt里,迭代器用于访问和处理一级容器的元素。

一级容器只包括顺序容器,关联容器

不包括容器适配器。

答案是错!

注意:这也是个判断题,答案是错!(只有随机存取迭代器可以比较大小)

迭代器的分类:

  1.输入迭代器(input iterator)

input iterator就像其名字所说的,工作的就像输入流一样.我们必须能

  • 取出其所指向的值
  • 访问下一个元素
  • 判断是否到达了最后一个元素
  • 可以复制

  因此其支持的操作符有  *p,++p,p++,p!=q,p == q这五个.凡是支持这五个操作的类都可以称作是输入迭代器.当然指针是符合的.

  2.输出迭代器(output iterator)

    output iterator工作方式类似输出流,我们能对其指向的序列进行写操作,其与input iterator不相同的就是*p所返回的值允许修改,而不一定要读取,而input只允许读取,不允许修改.

    支持的操作和上头一样,支持的操作符也是 *p,++p,p++,p!=q,p == q.

  使用Input iterator和output iterator的例子:

 

 1 template<class In,class Out> 2 void copy(In start,In beyond, Out result) 3 { 4      while(start != beyond) { 5          *result = *start; //result是输出迭代器,其*result返回的值允许修改 6          ++result; 7          ++start; 8       } 9 }10 11 //简写12 template<class In,class Out>13 void copy(In start,In beyond, Out result)14 {15      while(start != beyond)16         *result++ = *start++;//这个应该能看懂的...17 }

  3.前向迭代器(forward iterator)

     前向迭代器就像是输入和输出迭代器的结合体,其*p既可以访问元素,也可以修改元素.因此支持的操作也是相同的.

   4.双向迭代器(bidirectional iterator)

     双向迭代器在前向迭代器上更近一步,其要求该种迭代器支持operator--,因此其支持的操作有  *p,++p,p++,p!=q,p == q,--p,p--

   5. 随机存取迭代器(random access iterator)

    即如其名字所显示的一样,其在双向迭代器的功能上,允许随机访问序列的任意值.显然,指针就是这样的一个迭代器.

    对于随机存取迭代器来说, 其要求高了很多:

  • 可以判断是否到结尾(  a==b or a != b)
  • 可以双向递增或递减( --a or ++a)
  • 可以比较大小( a < b or a > b or a>=b ...etc)
  • 支持算术运算( a + n)
  • 支持随机访问( a[n] )
  • 支持复合运算( a+= n)

  结构图:

下面是vector 和 set遍历的两个例子

转载于:https://www.cnblogs.com/skx971016/p/6993881.html

迭代器 in C++相关推荐

  1. 完全理解Python迭代对象、迭代器、生成器

    本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators,俺写的这篇文章是按照自己的理解做的参考翻译,算不上是原文的中译版本,推荐阅读原文,谢谢网 ...

  2. 2021年大数据常用语言Scala(十九):基础语法学习 iterator迭代器

    目录 iterator迭代器 使用迭代器遍历集合 iterator迭代器 scala针对每一类集合都提供了一个迭代器(iterator)用来迭代访问集合 使用迭代器遍历集合 使用iterator方法可 ...

  3. python3 内置函数map 返回的迭代器转为列表

    python3 内置函数map 返回的是迭代器,python2 返回的才是列表, 在python3中想要使用需要把迭代器在转换成列表 list_a = [1, 2, 3, 4, 5]def add(n ...

  4. 生成器、迭代器的区别?

    迭代器是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string.list. dict.tuple 等这类容器对象,使用 for 循环遍历是很方便的. ...

  5. python基础(迭代器,生成器,装饰器)

    python: 生成器: 因为当列表元素达到一定上限,列表会占很大内存空间来存储,所以列表是受到内存限制的来适当使用. 生成器可以按照一个算法,循环推导出元素,就不用一次生成整个列表,而通过生成器(g ...

  6. C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)

    C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...

  7. Python 列表和迭代器区别

    列表不论遍历多少次,表头位置始终是第一个元素: 迭代器遍历结束后,不再指向原来的表头位置,而是为最后元素的下一个位置. 通过 type 关键字可以看到列表和迭代器的类型是不同的. In [1]: a ...

  8. Python 高阶函数filter、map、reduce、reversed、sorted及迭代器函数 iter

    1. filter(function, iterable) 过滤器,过滤掉不满足函数 function 的元素,重新返回一个新的迭代器. 其中 function 函数的第一个参数是可迭代对象 iter ...

  9. iter迭代器的应用

    迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束. 用户不用关心迭代器的内部结构,仅需通过next方法不断去读取下一个内容 不能随机访问任意一个内容,只 ...

  10. Python学习笔记3 流程控制、迭代器、生成器

    第3章 流程控制.迭代器.生成器 3.1 选择语句 1.语法:(1)if -else (2)if-elif-else 2.注意:(1)每个条件后面要使用冒号:(2)使用缩进划分语句块(3)python ...

最新文章

  1. EXCEL中SUMIF函数介绍
  2. 翻译关于ViewController的一篇文章
  3. Angular 内容投影 content projection 关于条件渲染问题的单步调试
  4. leetcode530. 二叉搜索树的最小绝对差
  5. 富爸爸系列之三富爸爸投资指南
  6. 一只青蛙跳向三个台阶_青蛙跳台阶问题的三种解法
  7. 大型网站系统架构分析
  8. motion加树莓派打造实时监控
  9. google海底光缆图_感受技术震撼:全球海底光缆分布图详解(附源地图链接)
  10. jmeter 高并发测试报告_Windows下JMeter分布式压测环境搭建
  11. servlet无法自动在web.xml中配置
  12. android10解决NetworkInfo废弃替代NetworkInfo isConnected()问题
  13. 计算机专业英语词汇1500词
  14. Gif截图工具——GifCam
  15. 多线程编程(3):线程池ThreadPool
  16. 使用matlab画图中图
  17. 中南大学计算机博士就业,求救!中南大学博士毕业要求
  18. 软件测试工程师笔试题带答案(二)
  19. ERROR Executor: Exception in task 0.0 in stage 1.0 (TID 1) java.sql.BatchUpdateException: Duplicate
  20. 2.5万字详细讲解个人网站的开发过程和项目的部署

热门文章

  1. iOS中网络请求的使用(GET请求与POST请求)
  2. C++ const使用情况总结
  3. SQL Server 2008将数据导出到SQL脚本文件
  4. Exchange 2010 无法删除第一个mailbox
  5. CMake使用详解一(单文件编译)
  6. java geoprocessor_ArcGIS GeoEvent Processor for Server 安裝與配置 (僅適用於壓縮安裝包)...
  7. 索引超出了数组界限_【每天一题】LeetCode 26. 删除排序数组中的重复项
  8. Python下面向对象的三大实例
  9. opencv 图片叠加_基于OpenCV的红绿灯识别代码解析
  10. python matlibplot_python matlibplot绘制3D图形