• 迭代器 in C++


        

    注意问题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遍历的两个例子

  • 相关阅读:
    堆排序算法
    二叉树的创建、遍历(递归和非递归实现)、交换左右子数、求高度(c++实现)
    hdoj1010 奇偶剪枝+DFS
    常见排序算法c++总结
    B
    C
    D
    E
    G
    F
  • 原文地址:https://www.cnblogs.com/skx971016/p/6993881.html
Copyright © 2020-2023  润新知