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