文章目录
- 前言
- 一、迭代器概览:
- 1、迭代器是什么?
- 2、迭代器存在的原因
- 3、迭代器实现思路
- 总结
前言
本文章是“vector模拟实现”文章的衍生内容,主要着重理解迭代器的功能原理,看完相信你会有收获。
一、迭代器概览:
基本了解迭代器,了解它的原理,和它的创建思路是重中之重!
1、迭代器是什么?
迭代器就是用来访问我们容器中元素的工具。它可以像指针一样通过加减法运算去逐个访问元素。
那有人说:诶那迭代器为什么和指针这么像?
2、迭代器存在的原因
迭代器就是为了像指针那样去访问元素,迭代器在模仿指针的行为。 我们数据结构中最简单最容易访问的便是vector了,它成员指向的空间是连续的(是一个数组)我们要访问它存储在数组中的元素只需要不断对地址(指针)做加减法(++/- -/+n/-n)即可。我们试想:要是所有的数据结构的元素访问都像访问一个vector一样简单该多好啊!! 没错!我们C++的祖师爷也陷入了这个美好的想象中,于是迭代器诞生了!迭代器便是为了使部分容器的元素访问在顶层都像访问vector一样简单。
那又有人说:迭代器怎么做到的?
3、迭代器实现思路
设计vector的迭代器:vector内部刚好是一个数组,地址连续,我们可以很好的用指针去访问,那么我们就直接让vector的原生指针去充当它的迭代器不就好了?
入:那不是多此一举吗?
先别急,我们先来看List的迭代器:list虽然也能用指针,但是它的节点之间元素地址不连续,我们只能通过list内部的next去找到下一个节点,但是这里的妙处便是祖师爷在这里将迭代器做成了一个类,这个迭代器类的成员便是list一个节点的地址(指针),我们在这个类中为指针常见的++/- -运算符做了运算符重载函数,当一个迭代器类对象去调用++/- -运算符重载函数时,类的内部完成对节点next或prev指针的访问(访问到下一个或上一个元素),并用访问到的元素创建另一个迭代器返回,这样在上层我们看起来就像是我们的list迭代器真的通过++访问到了下一个元素。 而迭代器这里既然是一个类,我们还可以对其写入很多东西,像是对指针的解引用(*)运算符重载。
所以vector的迭代器也不一定是它的原生指针,迭代器类能做的事太多了!
总结
今天主要写了一些对迭代器的理解。
本文章为作者的笔记和心得记录,顺便进行知识分享,有任何错误请评论指点:)。