c++指针与迭代器的区别

这是我感觉总结的很好的一篇回答:

知乎原回答链接

如果只讨论 STL container 类的 iterator,它们其实都是一种泛型指针。C风格指针是属于 iterator 的一种的。iterator 根据功能做了更细的划分,STL 中的 iterator 分成了五类。我觉得它们的区别:

在范围上,pointer 属于 iterator 的一种(random access iterator)
在功能上,iterator 有着比pointer 更细的划分并对应能力不同的功能(重载不同的运算符 )
在行为上,iterator 比 pointer更统一和良好的用法(更轻易使用 begin()、end()且不用担心越界)等

膜拜

在这里插入图片描述
指针与迭代器的差别:

迭代器:

(1):迭代器不是指针,而是类模板,表现的像指针,实际上他只是模拟了指针的一些功能,通过重载指针的一些操作符:->、、++、-- 等封装了指针。是一个”可遍历STL容器内全部或部分元素“的对象,本质是封装了原生指针,是指针概念的一种提升,提供了比指针更高级的行为,相当于一种智能指针,它可以根据不同的数据结构来实现不同的++,–等操作;
(2):迭代器返回的是对象的引用而不是对象的值,所以cout只能输出解引用(
)迭代器之后的值
(3):在设计模式中有一种模式叫迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器内部的表现形式情况下,使之能一次访问容器的各个元素,这种设计模式在STL中得到了广泛应用,是STL的关键所在。通过迭代器,可以使容器和算法有机粘合在一起,只要算法给予不同的迭代器,就可以对不同的容器进行相同的操作;

指针:

指针能指向函数而迭代器不行,迭代器只能指向容器;指针是迭代器的一种。指针只能指向某些特定的容器;迭代器是指针的抽象和泛化;所以,指针满足迭代器的所有要求;

因此,迭代器与指针是由很大差别的,虽然他们的表现行为相似,但本质是不同的!

指针是存放地址的变量,迭代器是类模板;

注意:迭代器在使用后就释放了,不能再继续使用,但指针可以;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值