欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

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

    • 资源ID:2204047       资源大小:106.50KB        全文页数:30页
    • 资源格式: PPT        下载积分:8金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要8金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

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

    第16章 容器和迭代器,容器是特定类型的对象的集合,也就是为了保存一组对象而设计的类容器一般提供插入、删除、查找以及访问容器中的所有对象等功能用户不必关心容器中的对象是如何保存的。用户只需要使用容器提供的插入操作将对象放入容器,用删除操作将对象从容器中删除数组是容器的一种实现,链表也是容器的一种实现,迭代器,给出数组的下标可以访问数组的某一元素,给出一个指向某一结点的指针可以访问链表中的一个元素。访问一个容器中的对象必须有一个指向容器中某一个对象位置的信息容器中的对象位置是什么类型的信息?如果容器是用数组实现,则是一个整型数。如果容器是用单链表实现,则是一个指向单链表结点的指针。对象位置的类型与容器的实现方式有关。因此,通常为每种容器定义一个表示其中变量位置的类型,称为迭代器。,迭代器,迭代器常常与容器一起使用。迭代器对象相当于是指向容器中对象的指针。迭代器对象“穿行”于容器,容器中的某一元素执行某种操作。可以将迭代器看成一种抽象的指针,迭代器进一步隐藏数据的存储方式。,迭代器常用操作,迭代器对象赋值迭代器对象的比较让迭代器移到当前对象的下一对象取迭代器指向的对象,迭代器的优点,在数组中,要访问所有结点可以用For(i=1;inext)Cout data endl;各种结构的抽象实现就是采用迭代器For(ListItr Itr(L);+Itr;+Itr)Cout Itr()endl;与某一元素相关的操作可以让迭代器完成,容器类只完成对表整体的操作。迭代器一般作为相应类的友元类或内嵌类。,迭代器实例 顺序表中的迭代器,设计一个用数组实现的容器。该容器可以通过简单的 运算符重载达到同时访问表元素的问题,但也可以用迭代器访问。功能:可以将数据依次放入容器。当数组不够大时,容器自动扩展数组。删除最后放入的对象在迭代器指出的位置插入一对象删除迭代器指出的位置的对象迭代器的常规操作:设置迭代器的初始位置,向后移一位置,判断迭代器指向的位置是否有对象,取迭代器指向的对象。,设计考虑,将迭代器类设置成容器类的内嵌类容器的行为:放入一对象删除一对象在指定位置放入一对象删除指定位置的对象取容器的首尾位置迭代器的行为设置迭代器的值迭代器向后移动比较两迭代器是否相同,类的设计,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 begin()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(const 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,18for(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)sq.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,迭代器实例 单链表中的迭代器,设计一个用单链表实现的容器。可以用迭代器访问功能:在迭代器指出的位置后插入一对象,迭代器指向新插入对象删除迭代器指出的位置后的对象迭代器的常规操作:设置迭代器的初始位置,向后移一位置,判断迭代器指向的位置是否有对象,取迭代器指向的对象。,设计考虑,链表中的每一元素存储在一个结点中,因此需要一个结点类。结点类是链表专用的,可设计成链表类的内嵌类。与容器相关的还有一个迭代器。迭代器也是容器专用的,因此也可以设计成链表的内嵌类。,类的设计,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 private: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()linkList 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;,总结,容器用于存放一组对象。用户不必关心容器是如何保存这组数据迭代器相当于是一个抽象的指针,指向容器中的对象。用户可以通过迭代器访问容器中的对象。,

    注意事项

    本文(C++程序设计课程介绍第16章 容器和迭代器.ppt)为本站会员(laozhun)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开