C++迭代器

135 阅读2分钟

迭代器的概念:

C语言有指针,C++语言有迭代器,迭代器有和指针类似的功能,都可以通过*迭代器(指针)输出元素值,即可以把他们都看作是地址。

  1. 迭代器(iterator)是一种可以遍历容器元素的数据类型。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。
  2. C++更趋向于使用迭代器而不是数组下标操作,因为标准库为每一种标准容器(如vector、map和list等)定义了一种迭代器类型,而只有少数容器(如vector)支持数组下标操作访问容器元素。
  3. 可以通过迭代器指向你想访问容器的元素地址,通过*x打印出元素值

迭代器按照定义方式分成以下四种。

  1. 正向迭代器
    定义:容器类名:iterator迭代器名;
  2. 常量正向迭代器
    定义:容器类名:const_iterator 迭代器名;
  3. 反向迭代器
    定义:容器类名::reverse_iterator迭代器名;
  4. 常量反向迭代器
    定义:容器类名::const_reverse_iterator迭代器名;

vector,是数组实现的,也就是说,只要知道数组的首地址,就能访问到后面的元素。所以,我们可以通过访问vector的迭代器来遍历vector容器元素。
List,是链表实现的,我们知道,链表的元素都存储在一段不是连续的地址空间中。我们需要通过next指针来访问下一个元素。那么,我们也可以通过访问list的迭代器来实现遍历list容器元素。

由此可见,迭代器和容器是密不可分的、紧密相连的的关系。不同的容器,它们的迭代器也是不同的,但是它们的迭代器功能是一样的。假如没有迭代器,由于vector和list容器的存储特点,你需要两种算法去实现遍历vector和list容器的功能,复杂且低效有了迭代器,遍历容器的效率会大大提高。

迭代器的使用: 容器都有成员begin和end,其中begin成员复制返回指向第一个元素的迭代器,而end成员返回指向容器尾元素的下一个位置的迭代器,该位置不存在元素。

下面是遍历vector容器的实例:

image.png

逆序遍历:

image.png