接口,迭代器,概念与区别

一.接口

     在c语言中,我们对接口就有了初步认知,平时直接调用的输入输出函数,实际上就是别人为了提高效率,写好了放在库里,我们去包这个库,便可直接调用传参就能实现,比如最经典的:

#include<stdio.h>
int main()
{
	printf("hello world\n");
	return 0;
}

     在c++中,接口的功能就更为强大了,针对他自己已经定义好的类型,如string,vector等,很多我们之前要自己写的函数,c++大手一挥,都提供了现成的给大家使用,比如find,erase,insert等。

1.概念

     接口的本质就是方法,我们可以借助这些方法方便地处理各种容器(当然建议大家也要去了解这些底层的实现以便提升自己的代码能力)。

2.优点
  • 解耦:接口让程序的模块化更强,调用者只需依赖接口,而不依赖具体的实现细节。
  • 提高可维护性:接口和实现分离,使代码结构更加清晰、维护更容易。

二.迭代器

     迭代器是一种用于遍历容器(如数组、链表、向量等)中元素的对象,你可以将他近似看为一个指针,但比指针所能访问的容器多得多。它提供了一种统一的方式来访问容器中的元素,而无需关心底层的实现细节。这使得代码在操作不同容器时更具通用性和灵活性。C++ 标准库(STL)中的大部分容器(如 vector、list、map 等)都支持迭代器。

1.迭代器的作用
  • 遍历容器:迭代器允许我们访问容器中的每个元素。
  • 解耦(降低系统中不同部分之间的依赖性)容器与算法:通过迭代器,算法可以与具体容器解耦,使得算法适用于多种容器类型。
  • 提供一致的接口:迭代器为不同的容器提供了统一的接口,如 begin()、end(),便于使用标准库中的各种算法(如 sort、find 等)。
2.迭代器的类型
  • 输入迭代器(Input Iterator):只允许从容器中读取数据,不支持写操作。典型使用场景是读取流数据,常用于遍历 std::istream。
  • 输出迭代器(Output Iterator):只允许写数据到容器,不支持读操作。典型使用场景是写入流数据,常用于 std::ostream。
  • 单向迭代器(Forward Iterator):支持只读和只写操作,但只能在一个方向上移动。常用于支持链表等数据结构,比如queue。
  • 双向迭代器(Bidirectional Iterator):可以双向移动(++/–),支持读取和写入。常用于支持双向链表等数据结构,如list,map,set,multiset,multimap等。
  • 随机迭代器(Random Access Iterator):随机访问迭代器在双向迭代器的基础上增加了随机访问能力,即可以通过算术运算符(如 +、-)跳转到容器中的任意位置,类似于指针的行为。随机访问迭代器适用于那些支持随机访问的容器,像是vector、deque、array。

在这里插入图片描述

三.迭代器与接口的区别

1.概念
  • 接口:是一个抽象概念,表示一组约定或规范,通常通过包含纯虚函数的抽象类来定义。
  • 迭代器:是一种对象,提供了在容器(如 vector、deque、array 等)中遍历元素的方法。
2.作用
  • 迭代器:为容器提供一种通用的遍历方式,使得代码可以在不关心容器底层实现的情况下访问容器中的元素。根据迭代器类型而提供操作包括增量(++)、解引用(*)、随机访问(+、-、[])等。
  • 接口:通过接口的定义,可以让不同的类实现相同的功能,符合面向对象编程中的多态原则。
3.总结

在这里插入图片描述

     总的来说,迭代器更关注数据遍历与访问,而接口则更关注行为的定义和多态的实现。在 C++ STL 中,迭代器通过定义容器的标准化访问方式,为通用算法提供了接口,使得不同类型的容器可以使用相同的操作逻辑。
     对于初始c++的我们来说,迭代器在某种程度上可以被视为容器的访问接口,而且这个访问接口(迭代器)里面还包含着更小的接口,如begin()、end(),这相当于接口里的接口。不能把这两个划上等号,但勉强能画上一个约等于,这对于我们初学者便足够,会用了。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值