第六十一讲 迭代器(6)

关于迭代器我们说了已经六讲,想想,我们有点文不对题,至少至今我们依旧不知道什么是迭代器,我曾几度想要修改标题,但后来想想也就算了,我们还是让他叫迭代器吧,虽然我们到现在还没有明白什么迭代器,但是现在我想如果我们说起标准库里的迭代器,那么大家肯定会想起来,我操,原来就是这个样子的啊。

关于My_Array,我们扩展了一个方法,那么再让大家继续去思考另外一个问题,大家应该也看到了,至今我们的My_Array没有删除元素的功能,所以大家去扩展一个方法,一个叫做pop的方法,就是从数组最后弹出一个元素,同时让他删除,为什么让大家思考这个问题呢?因为只有熟悉一个类里有些什么东西,才能够更好的使用他。

也许我们见过或许就我们这课题中我们也使用过下面这样的代码:
—————————–
vector<int>a;


…………
…………
vector<int>::iterator it=a.begin();


while(it != a.end()){

cout<<*it++<<endl;


}
——————————-

又或者我们见过这样的代码:
—————————–
vector<int>a;


…………
…………
vector<int>::iterator it = a.begin();


cout<<*(it+3)<<endl;


——————————
iterator这是真正的迭代器,这些功能都很实用,所以,我们今天的任务是来看看怎么扩展我们的My_Point;


————————————-
My_Point&

operator++(){

++m_Sub;


return *this;


}

My_Point&

operator++(int){

My_Point
temp = *this;



++m_Sub;


return temp;


}

friend bool operator==(const My_Point<T>&

t1,const My_Point<T>&

t2){

if(t1.m_Ptr != t2.m_Ptr)

return 0;


return (t1.m_Sub == t2.m_Sub);


}

friend bool operator<(const My_Point<T>&

t1,const My_Point<T>&

t2){

if(t1.m_Ptr != t2.m_Ptr)

return 0;


return (t1.m_Sub<t2.m_Sub);


}

friend bool operator!=(const My_Point<T>&

t1,const My_Point<T>&

t2){

if(t1.m_Ptr != t2.m_Ptr)

return 0;


return (t1.m_Sub != t2.m_Sub);


}
——————————————–

为了篇幅好看一些,我就写这几个出来大家可以作为参考,然后大家可以根据自己的需要来扩展My_Point,不过,说实在的,这个指针没有必要扩展,因为我们说他主要为了教学的原因,因为标准库里有很多东西可以用来取代我们的My_Point,虽然他们的功能比不上我们的My_Point,但是配合着相关容器使用,比我们开发完善一个My_Point要实惠得多,而且标准库更加具有移植性一些,我们简单的来运用一下关于扩展的这些功能,看下面的程序:
———————————–
int main()
{

My_Array<int>a;


for(int i=0;

i<10;

i++)

a.Push_Back(i);


My_Point<int>b=a;


for(int i=0;

i<10;

i++)

cout<<*b++<<endl;


return 0;


}
————————————-

这个程序通过My_Point的对象,然后遍历My_Array,而他虽然算不上是My_Array的内部迭代器,但他却也算是迭代器家族的一员了。为什么说他只是迭代器家族中的一员?难道迭代器遍历元素不都这样的吗?当我们以后见到list或者set或者关联容器这些非序列容器的时候我们就会明白,遍历一个非序列容器元素不再是简单的++就可以做到的。

那么什么是迭代器?我们可以这么理解,迭代器是一个系列类型,他们保存着相同的数据,提供相同的操作。

关于迭代器,虽然我们没有深入探讨迭代器这个主题,但到现在大家对迭代器应该也有一个了解,他是怎么工作的也该是有一些想法了,所以,可以这么说,虽然我们这六讲里面没有谈迭代器,但是我们却一直在打造迭代器,一直在让大家明白迭代器是怎么工作的,当然,如果大家明白了,那么说明这方法还是有效的,如果大家云里雾里,觉得文不对题,那么这是我的错,为了让大家更加能够理解,我们接下来准备去探究一下vector。

好吧,下周再见,记得好像留给大家有几个问题了,其中一个是关于构造一个学生成绩的类,不知道大家完成得这么样了,有想法的可以直接回复,我会挑一些设计得好不错的拿出来和大家分享,功能方法由你们去定,但是要能够体现得出这是一个学生成绩系统。


=============================
回复D直接查看目录


原文始发于微信公众号(

C/C++的编程教室

):第六十一讲 迭代器(6)

|

发表评论