- 1、本文档共12页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 标准模板库(STL)
第8章 标准模板库(STL) 标准模板库本质上就是类模板,就是系统自带的类模板,以供开发者使用。C++自带的类库不多,STL标准模板库是一种高效的类模板集合,使用STL可以大大提高开发效率和提高开发粒度。STL主要提供了基本的数学模型模板类,如vector向量模板类等。也提供了几个计算机软件中常用的数据结构:stack栈模板类、list链表类等,本章主要修行的要点如下。 vector类模板的定义和使用:读者将学会其的定义和使用。 迭代器:读者将学会使用迭代器的基本概念及使用方法。 通用算法:读者将学会序列、拷贝、查找和排序等通用算法,这些通用算法可以用在任何类型的序列中。 auto_ptr类:读者将了解到auto_ptr类,这是一个很重要的模板。 8.1 vector模板类的定义和使用 数组是读者非常熟悉的一种数据类型,如果需要定义一个整型数组,并且数组的大小为10,则代码如下: int array[10] ; // 定义具有10个元素的整型数组,即最多能放置10个整型元素 这就导致了一个问题,array数组最多只能放置10个整型数据,假设要放置11个,或者更多,哦,对不起,绝对不行!对于这个问题,也有个好主意,就是将数组大小定义的大一点,如: int array[10000] ; // 定义具有10000个元素的整型数组,即最多能放置10000个整型元素 不过这样也有不妥,先不钻牛角尖说要放置10001个整型数据,就算不超过范围,难道不觉得这样太浪费空间了吗?在Win32环境下,整型数据是4个字节,那么10000个整型就是40K字节,这样算起来浪费是非常巨大的了。仔细想想,使用数组至少有两个缺点: 空间不足,容易造成溢出问题。 空间定义太大,造成程序内存浪费。 8.1.1 vector模板类的定义和初始化 【本小节示例参考:\源代码\C08\vectorObject】 在C++程序设计中,常常使用vector向量类型来代替数组,vector向量类具有数据的一般特性,它是以有序方式存储序列元素,vector向量类型是一个模板类,它的原型如下: templateclass DataType // 模板定义 std::vectorDataType; // 模板格式 8.1.2 vector模板类常用的方法详解 vector并不只是有push_back()方法,还有其他很多种有用的方法,基本上,只要你想得到常用的数组操作方法,向量模板类都定义好了,主要有以下几个。 pop_back():弹出最后一个元素,弹出后,向量容量减1。 size():返回向量的当前容量,使用该函数可以解决客户程序不知道数组大小问题的苦恼。 empty():判断向量是否为空。 clear():清除向量中的所有元素,并将容量改写为0。 insert(pos,elem):在pos位置插入elem元素,而在pos后的元素相应后移,当然,elem元素类型要与向量元素类型一致。 insert(pos,n,elem):在pos位置插入n个elem元素,而后面元素相应后移。 insert(pos,beg,end):在pos位置插入[beg,end]区间的元素,也就是说,将[beg,end]区间的元素复制一份,插入到pos位置,而后面的元素相应后移。 8.1.3 迭代器的定义和使用 【本小节示例参考:\源代码\C08\vectorIterator】 迭代,并不是什么新名词,迭代就是将一个数组或向量序列顺序做一次访问。估计读者对以下for语句非常熟悉: for( int i = 0 ; i 10 ; i++ ) { a[i] = b[i]; // 两个数组对应元素赋值 …. ; // 其他循环体程序语句 } 在循环体内,a[]数组和b[]数组都实现了“迭代”的动作过程。也就是保证了数组序列的全部或部分序列被访问到、被赋值、被读取。如果是对于向量的迭代,还可以有更直观的代码,如代码示例8.2所示。 8.2 通用算法简介 前文所讲的是向量,向量是一个序列,这样的序列事实上是封装在一个类对象中的。因此,可以将向量模板类称为“容器”。C++中的“容器”和日常生活中的容器其实是一样的,如脸盆是一个容器,至于脸盆里面能放什么,脸盆都无所谓,可以放青菜,可以放米,可以放苹果,C++中的“容器”也是一样的,“容器”能存放double类型的元素,也可以存放int类型的元素,还可以存放类对象,脸盆和C++中的容器至少有两个不同点: (1)C++中的“容器”只能存放一种类型的变量或对象,如要么都存放double类型的变量,要么都存放int类型的变量,不能既有double变量,又有int变量,而脸盆则可以同时放米、青菜和苹果。 (2)脸盆
您可能关注的文档
- 竞聘开店开持处主管岗位竞聘模板.ppt
- 立体车库为啥叫好不叫座.ppt
- 竣工预验收监理评估报告.doc
- 端午节——蛋袋制作.ppt
- 笔画、偏旁、汉字结构、笔顺书写规则、易错字要点.doc
- 笠翁对韵(三江).ppt
- 笔画(撇、长撇、短撇).pptx
- 第01讲 促销员应有的认识和从业观念.ppt
- 第03章 白盒测试.ppt
- 笔记本内部维修教程资料(精).ppt
- 2016-2017学年高中生物第二单元生态工程与生物安全第1章第2节我国的生态工程教案中图版选修3.doc
- 2022-2023学年小升初英语易错点专练06完形填空15篇(广州教科版专版含答案)2.docx
- 期中专项四年级英语下册(含答案)3.docx
- 期末卷(二)(含答案解析)-2022-2023学年高二历史期中期末复习备考必刷题(选择性必修一国家制度与社会治理).docx
- 第4课欧姆定律的应用第一讲欧姆定律实验探究(原卷版).docx
- Unit1限制性定语从句语法讲义人教版高一英语学生版213.docx
- 2023年宁波市初中毕业升学文化考试科学模拟卷(八).docx
- 5.3细胞呼吸的原理和应用课件高一上学期生物人教版必修12.pptx
- 高中政治更好发挥政府作用教学设计.docx
- 体悟民间故事中的幸福--五上《中国民间故事》导读课.docx
文档评论(0)