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、

原文地址:https://www.cnblogs.com/cppskill/p/5408877.html