【C++、stl】迭代器是什么?迭代器理解

文章目录

  • 前言
  • 一、迭代器概览:
    • 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的迭代器也不一定是它的原生指针,迭代器类能做的事太多了!


总结

今天主要写了一些对迭代器的理解。


本文章为作者的笔记和心得记录,顺便进行知识分享,有任何错误请评论指点:)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值