STL中迭代器的作用,有指针为何还要迭代器

请你来说一下STL中迭代器的作用,有指针为何还要迭代器

参考回答:

1、迭代器

Iterator(迭代器)模式又称Cursor(游标)模式,用于提供一种方法顺序访问一个聚合对象中各个元素, 而又不需暴露该对象的内部表示。或者这样说可能更容易理解:Iterator模式是运用于聚合对象的一种模 式,通过运用该模式,使得我们可以在不知道对象内部表示的情况下,按照一定顺序(由iterator提供的 方法)访问聚合对象中的各个元素。
 
由于Iterator模式的以上特性:与聚合对象耦合,在一定程度上限制了它的广泛运用,一般仅用于底层聚合支持类,如STL的list、vector、stack等容器类及ostream_iterator等扩展iterator。

2、迭代器和指针的区别

迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,重载了指针的一些操作符,->、*、++、--等。迭代器封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象,本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他可以根据不同类型的数据结构来实现不同的++,--等操作。
迭代器返回的是对象引用而不是对象的值,所以cout只能输出迭代器使用*取值后的值而不能直接输出其自身。

3、迭代器产生原因

Iterator类的访问方式就是把不同集合类的访问逻辑抽象出来,使得不用暴露集合内部的结构而达到循环遍历集合的效果。

 4.为什么有了指针还要迭代器

1、通过迭代器访问容器,可以避免许多错误,同时还能隐藏容器的具体实现。

2、迭代器可以保证对所有容器的基本遍历方式,都是一样的,实现算法时若需要遍历,则使用迭代器,则可以不用关注容器的具体类型,实现数据结构和算法的分离。

3、迭代器本身有很多优点,可以弥补C++语言的不足,比如它的iterator_category,可以得到迭代器所指向的类别,这样可以根据不同的类别的特性,提供不同的算法。

迭代器是一种抽象的设计概念,在设计模式一书中的定义为:提供一种方法,使之能够依序的访问某个聚合物(容器)中所含的各个元素,而又不需要暴露该聚合物中的内部实现细节。也就是说迭代器能够访问容器内部实现,而不需要管容器中是怎么实现的。

STL中将容器与算法分开实现,容器负责数据的存储,算法代表着用系统的方法描述解决问题的策略机制。也就是说一个输入-处理-输出的流程,其中在处理过程中就需要对输入的数据能够进行读取或者修改等。而算法中的输入为某些容器时,算法可能就需要知道容器能够提供对其的访问函数。但是每个容器的访问函数都不一定相同,这时候如果针对每一个容器,算法都需要有特定的版本,这样会造成大量的代码冗余。那么怎么办呢?

我们可以在容器与算法之间,用迭代器将其撮合在一起,算法通过迭代器来访问容器,而无需关心容器内的具体实现。通过设计一个抽象的迭代器接口定义一个统一的实现方式。由于每一个容器中的内部存储模式都不一样,因此对于每一个类别的容器都需要有一个专属迭代器来完成对数据的访问,该迭代器继承并实现于抽象的迭代器接口。

你可能感兴趣的:(C++,迭代器,指针,算法)