C++-----MySTL实现(4)---迭代器实现

本文介绍了C++中实现MySTL时迭代器的设计,重点讲解了value type、difference type、reference type和pointer type四种迭代器类型,并探讨了迭代器的分类及其在算法效率中的重要性。此外,还展示了迭代器类的定义方式。
摘要由CSDN通过智能技术生成

1、相关


    iterator.h文件其实并不涉及具体的哪一个容器的迭代器,只是定义了一些统一的标准,比如迭代器相应的型别,比如一个算法需要用到迭代器所指对象的型别,而怎么获得型别在前面traits编程已经说过。根据经验,最常用到的迭代器的型别有五种,value type,difference type,pointer,reference,iterator catagoly。

    value type:是指迭代器所指对象的型别。

    difference type:用来表示两个迭代器之间的距离,因此它也可以用来表示一个容器的最大容量,因为对于一个连续空间的容器而言,头尾之间的距离就是其最大容量。

    reference type:从迭代器所指之物的内容是否允许改变角度来看,迭代器分为两种:不允许改变所指对象的内容,称为constant iterator,例如:const int *pic。允许改变所指对象内容,称为mutable iterator,例如:int*pi。当对一个mutable iterator进行提领时,获得的不应该是一个右值,因为右值不允许赋值。在C++中,函数如果要传回左值,都是以by reference的方式进行的。

    pointer type :pointer和reference在C++中有非常密切的关联,如果传回一个左值,令它代表所指之物是可能的,那么传回一个左值,令它代表所指之物的地址也一定可以,也就是说可以返回一个指针,指向迭代器所指之物。

    iterator catagoly:最后一个迭代器型别会引发大规模的代码工程。在讨论这个型别之前先讨论迭代器的分类: 

// 五种迭代器类型
    //这种迭代器所指的对象不允许外界改变,只读
	struct input_iterator_tag {};  
	//唯写
	struct output_iterator_tag {};
	//允许写入型算法,如replace()在此种迭代器区间上进行读写
	struct forward_iterator_tag : public input_iterator_tag {};
	//可双向移动,某些算法要求
	struct bidirectional_iterator_tag : public forward_iterator_tag {};
	//前四种迭代器只供应一部分指针算术运算,前三种支持operator++,第四种再加上operator--。
	//第五种全都支持,
	struct random_access_iterator_tag : public bidirectional_iterator_tag {};

 

        设计算法时,如果可能尽量针对每种迭代器提供一个明确定义并针对更强化的某种迭代器提供另一种定义,这样才能在不同情况下提供最大效率。

       iterator class不含有任何成员,只是纯粹定义型别,所以继承它不会产生任何负担ÿ

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值