第8章 标准模板库(STL).ppt

  1. 1、本文档共12页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 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)脸盆

文档评论(0)

l215322 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档