C++程序设计课程介绍第16章 容器和迭代器.ppt

上传人:laozhun 文档编号:2204047 上传时间:2023-01-30 格式:PPT 页数:30 大小:106.50KB
返回 下载 相关 举报
C++程序设计课程介绍第16章 容器和迭代器.ppt_第1页
第1页 / 共30页
C++程序设计课程介绍第16章 容器和迭代器.ppt_第2页
第2页 / 共30页
C++程序设计课程介绍第16章 容器和迭代器.ppt_第3页
第3页 / 共30页
C++程序设计课程介绍第16章 容器和迭代器.ppt_第4页
第4页 / 共30页
C++程序设计课程介绍第16章 容器和迭代器.ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《C++程序设计课程介绍第16章 容器和迭代器.ppt》由会员分享,可在线阅读,更多相关《C++程序设计课程介绍第16章 容器和迭代器.ppt(30页珍藏版)》请在三一办公上搜索。

1、第16章 容器和迭代器,容器是特定类型的对象的集合,也就是为了保存一组对象而设计的类容器一般提供插入、删除、查找以及访问容器中的所有对象等功能用户不必关心容器中的对象是如何保存的。用户只需要使用容器提供的插入操作将对象放入容器,用删除操作将对象从容器中删除数组是容器的一种实现,链表也是容器的一种实现,迭代器,给出数组的下标可以访问数组的某一元素,给出一个指向某一结点的指针可以访问链表中的一个元素。访问一个容器中的对象必须有一个指向容器中某一个对象位置的信息容器中的对象位置是什么类型的信息?如果容器是用数组实现,则是一个整型数。如果容器是用单链表实现,则是一个指向单链表结点的指针。对象位置的类型

2、与容器的实现方式有关。因此,通常为每种容器定义一个表示其中变量位置的类型,称为迭代器。,迭代器,迭代器常常与容器一起使用。迭代器对象相当于是指向容器中对象的指针。迭代器对象“穿行”于容器,容器中的某一元素执行某种操作。可以将迭代器看成一种抽象的指针,迭代器进一步隐藏数据的存储方式。,迭代器常用操作,迭代器对象赋值迭代器对象的比较让迭代器移到当前对象的下一对象取迭代器指向的对象,迭代器的优点,在数组中,要访问所有结点可以用For(i=1;inext)Cout data endl;各种结构的抽象实现就是采用迭代器For(ListItr Itr(L);+Itr;+Itr)Cout Itr()endl

3、;与某一元素相关的操作可以让迭代器完成,容器类只完成对表整体的操作。迭代器一般作为相应类的友元类或内嵌类。,迭代器实例 顺序表中的迭代器,设计一个用数组实现的容器。该容器可以通过简单的 运算符重载达到同时访问表元素的问题,但也可以用迭代器访问。功能:可以将数据依次放入容器。当数组不够大时,容器自动扩展数组。删除最后放入的对象在迭代器指出的位置插入一对象删除迭代器指出的位置的对象迭代器的常规操作:设置迭代器的初始位置,向后移一位置,判断迭代器指向的位置是否有对象,取迭代器指向的对象。,设计考虑,将迭代器类设置成容器类的内嵌类容器的行为:放入一对象删除一对象在指定位置放入一对象删除指定位置的对象取

4、容器的首尾位置迭代器的行为设置迭代器的值迭代器向后移动比较两迭代器是否相同,类的设计,template class seqlist private:int size;int current_size;T*storage;void doubleSpace();public:seqlist(int s=10):size(s)storage=new Tsize;current_size=0;seqlist()delete storage;,void push_back(const T,class Itr T*pos;public:Itr(T*obj=NULL)pos=obj;Itr,Itr begi

5、n()return Itr(storage);Itr end()return Itr(storage+current_size);void insert(Itr,doubleSpace,template void seqlist:doubleSpace()T*tmp=storage;size*=2;storage=new Tsize;for(int i=0;i current_size;+i)storagei=tmpi;delete tmp;,insert,template void seqlist:insert(Itr,erase,template void seqlist:erase(co

6、nst Itr,应用,int main()seqlist sq(10);seqlist:Itr itr1;for(int i=0;i 10;+i)sq.push_back(2*i+1);cout 用下标运算符输出:n;for(i=0;i 10;+i)cout sqi t;cout 用迭代器输出:n;for(itr1=sq.begin();itr1!=sq.end();+itr1)cout*itr1 t;,输出,用下标运算符输出:1 3 5 7 9 11 13 15 17 19用迭代器输出:1 3 5 7 9 11 13 15 17 19,/插入0,2,4,6,8,10,12,14,16,18f

7、or(itr1=sq.begin(),i=0;i 20;+itr1,+itr1,i+=2)sq.insert(itr1,i);cout 插入0,2,4,6,8,10,12,14,16,18:n;for(itr1=sq.begin();itr1!=sq.end();+itr1)cout*itr1 t;,输出,插入0,2,4,6,8,10,12,14,16,18:0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19,/删除0,2,4,6,8,10,12,14,16,18for(itr1=sq.begin();itr1!=sq.end();+itr1)s

8、q.erase(itr1);cout 删除0,2,4,6,8,10,12,14,16,18:n;for(itr1=sq.begin();itr1!=sq.end();+itr1)cout*itr1 t;return 0;,输出,删除0,2,4,6,8,10,12,14,16,18:1 3 5 7 9 11 13 15 17 19,迭代器实例 单链表中的迭代器,设计一个用单链表实现的容器。可以用迭代器访问功能:在迭代器指出的位置后插入一对象,迭代器指向新插入对象删除迭代器指出的位置后的对象迭代器的常规操作:设置迭代器的初始位置,向后移一位置,判断迭代器指向的位置是否有对象,取迭代器指向的对象。,

9、设计考虑,链表中的每一元素存储在一个结点中,因此需要一个结点类。结点类是链表专用的,可设计成链表类的内嵌类。与容器相关的还有一个迭代器。迭代器也是容器专用的,因此也可以设计成链表的内嵌类。,类的设计,template class linkList private:struct node elemType data;node*next;node(const elemType,private:node*head;void makeEmpty();public:linkList()head=new node;linkList()makeEmpty();delete head;,class Itr p

10、rivate:node*current;public:Itr(node*p)current=p;bool operator()()const return current!=NULL;bool isHead()const return current=head;const elemType,void insert(Itr,makeEmpty,template void linkList:makeEmpty()node*p,*q;p=head-next;head-next=NULL;while(p!=NULL)q=p-next;delete p;p=q;,应用,int main()linkLis

11、t lq;linkList:Itr itr1=lq.GetHead();for(int i=0;i 10;+i)lq.insert(itr1,2*i+1);cout 用迭代器输出:n;for(itr1=lq.begin();itr1();+itr1)cout*itr1 t;,输出与数组实现相同,/插入0,2,4,6,8,10,12,14,16,18for(itr1=lq.GetHead(),i=0;i 20;+itr1,i+=2)lq.insert(itr1,i);cout 插入0,2,4,6,8,10,12,14,16,18:n;for(itr1=lq.begin();itr1();+itr1)cout*itr1 t;/删除0,2,4,6,8,10,12,14,16,18for(itr1=lq.GetHead();itr1();+itr1)lq.erase(itr1);cout 删除0,2,4,6,8,10,12,14,16,18:n;for(itr1=lq.begin();itr1();+itr1)cout*itr1 t;return 0;,总结,容器用于存放一组对象。用户不必关心容器是如何保存这组数据迭代器相当于是一个抽象的指针,指向容器中的对象。用户可以通过迭代器访问容器中的对象。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号