• iterator_教程中的讲解


    ZC: 在讲 vector的时候讲到的

    1、分类:

    (1)、输入(只读)  只支持一遍算法

    (2)、输出(只写)  只支持一遍算法

    (3)、正向  可对一个值进行多次读写  ==> 相当于 输入迭代器+输出迭代器 的功能组合

    (4)、双向  正向迭代器+向后?  应该既能向前又能向后移动吧(但是一次只能移动一个位置)?

    (5)、随机  双向迭代器+向前/向后跳过任意个位置.任何位置

    2、支持的操作:

      ①双向迭代器

        it++, +it, it--, --it, *it,

        itA=itB, itA==itB, itA!=itB

        ◆ list, set, multiset, map, multimap 支持双向迭代器

      ②随机迭代器

        双向迭代器 的所有操作

        其它的操作:

          it+=i, it-=i, it+i(或it=it+i)(ZC: 这两货不一样吧?), it[i],

          itA<itB, itA<=itB, itA>itB, itA>=itB

        ◆ vector deque(queue,stack) 支持随机访问迭代器

    3、

      ++it  返回 引用  效率高

      it++  返回 值   效率低

    4、

      通过 “iterator == 容器实例.end()” 来判断 迭代器是否指向了 最后一个元素的后面

        ZC: “reverseIterator == 容器实例.rend()”

      4.1、在循环中,用“iterator == 容器实例.end()”来作为 循环是否结束的依据。

      4.2、在 if 中,用“iterator == 容器实例.end()”来判断 返回的 iterator 是否为空。

    5、

      vector<T>::const_iterator
      vector<T>::const_reverse_iterator
      vector<T>::iterator
      vector<T>::reverse_iterator

      5.1、容器中的 insert(...) 和 erase(...) 仅接受 iterator

      5.2、<<Effective STL>>中建议,用 iterator 取代另外3种

    6、

      ZC: 第7讲【39:40】左右,iterator作为参数时,注意 "++it"和"it++"的区别,别用错了。前者是 自增之后再传入函数,后者是先传入函数 等函数运行结束之后再自增。

    7、数组指针 ==> iterator

      类似 “vector<T> vecT(iteratorBegin, iteratorEnd);”这样的构造函数,构造函数的参数 可以传数组指针。数组指针在特定情况下可以当做迭代器使用。

    8、

  • 相关阅读:
    看《环太平洋》归来
    在Fedora8上安装MySQL5.0.45的过程
    在Win7上安装MySql5.2遇到Write configuration file的解决
    每一个问题都是一把锁
    Fedora8上Apache Httpd与Tomcat6初集成
    在Fedora8上的Tomcat上deploy一个war
    在Fedora8上配置Tomcat6.0.37
    在Fedora8上配置Apache Httpd
    在Fedora8上安装jdk-7u25-linux-i586.rpm的步骤
    Java继承中的几道面试题
  • 原文地址:https://www.cnblogs.com/cppskill/p/5408877.html
Copyright © 2020-2023  润新知