C++ STL 中 iterator迭代器和指针的区别

迭代器是类模板,模拟指针功能,用于遍历STL容器,提供比指针更高级的行为。它返回对象引用而非值,并在STL中扮演关键角色,允许算法对不同容器进行操作。迭代器在插入操作后可能失效,而指针则不会。指针可以指向函数,而迭代器只能指向容器。在设计模式中,迭代器模式允许遍历容器而不暴露其内部结构。迭代器是STL的关键,而指针是迭代器的一种抽象和泛化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

迭代器与指针的差别:

迭代器:

(1)迭代器不是指针,是类模板,表现的 像 指针。他只是 模拟了指针的一些功能,通过 重载了指针的一些操作符,->,*,++ - -等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象, 本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的+ +,- -等操作;

(2)迭代器返回的是 对象引用而不是对象的值,所以cout只能输出迭代器使用 *取值后的值而不能直接输出其自身。

(3)在设计模式中有一种模式叫 迭代器模式,简单来说就是提供一种方法,在不需要暴露某个容器的内部表现形式情况下,使之能依次访问该容器中的各个元素,这种设计思维在STL中得到了广泛的应用,是STL的关键所在,通过迭代器,容器和算法可以有机的粘合在一起,只要对算法给予不同的迭代器,就可以对不同容器进行相同的操作。

  ite=find(vec.begin(),vec.end(),88);
  vec.insert(ite,2,77);  //迭代器标记的位置前,插入数据;
  cout<<*ite<<endl;  //会崩溃,因为迭代器在使用后就释放了,*ite的时候就找不到它的地址了;

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

指针:

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

总之,指针和迭代器是有很大差别的,虽然他们表现的行为相似,但是本质是不一样的!一个是类模板,一个是存放一个家伙的地址的指针变量。

————————————————

本文载自 :iterator迭代器和指针的区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值