欢迎来到天天文库
浏览记录
ID:39944475
大小:433.50 KB
页数:63页
时间:2019-07-15
《c++电子课件(下)第十一章》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十一章标准模板库(选读)库(library)是一系列程序组件的集合,它们可以在不同的程序中重复使用。库函数设计的第一位的要求就是通用性,模板(template)为通用性带来了不可估量的前景。标准模板库(StandardTemplateLibrary)是ANSI/ISOC++最有特色、最实用的部分之一。STL包含:容器类(container)迭代子(iterator)算法(algorithm)泛型算法(genericalgorithm)和函数对象(functionobject)的概念与使用使算法摆脱了对不同类型数
2、据个性操作的依赖。标准模板库的引入:11.1标准模板库简介11.3顺序容器11.2迭代子类11.6容器适配器11.4泛型算法与函数对象11.5关联容器第十一章标准模板库(选读)11.1标准模板库简介容器类(Container)容器类是管理序列的类,是容纳一组对象或对象集的类。通过由容器类提供的成员函数,可以实现诸如向序列中插入元素,删除元素,查找元素等操作,这些成员函数通过返回迭代子来指定元素在序列中的位置。容器分为三大类:顺序容器(SequenceContainerorSequentialContainer)关
3、联容器(AssociativeContainer)容器适配器(ContainerAdopter)参见表11.1。11.1标准模板库简介顺序容器和关联容器称为第一类容器(first-classcontainer)。STL也使容器提供类似的接口。许多基本操作是所有容器都适用的,可以用有类似操作的新类来扩展STL。这些函数和运算符可通称为容器的接口。表11.2所有标准库容器共有的函数11.1标准模板库简介(2)泛型算法(GenericAlgorithm):在模板中算法不依赖于具体的数据类型,而泛型算法更进一步不依赖于具
4、体的容器。泛型算法中采用函数对象(FunctionObject)引入不同情况下同一算法的差异。它没有使用继承和多态,避免了虚函数的开销,使STL效率更高。迭代子把算法与容器连接起来。注意算法只是间接通过迭代子操作容器元素,算法本身与容器无关。算法通常返回迭代子。(3)迭代子(Iterator):迭代子是指针概念的泛型化,它指向容器中的元素,它能象指针一样增减,轮流指示容器中每个元素。所以说迭代子是面向对象版本的指针。迭代子可以包括指针,但迭代子又不仅仅是一个指针。11.2迭代子类迭代子属性:C++标准库中对普通类
5、型迭代子按照基本访问功能分类,有五种四级(输入/输出为同一级)预定义迭代子,其功能最强最灵活的是随机访问迭代子。表11.3迭代子属性表11.4各种迭代子可执行的操作【例11.1】寻找数组元素。由本例演示可见,泛型算法不直接访问容器的元素,所以与容器无关。元素的全部访问和遍历都通过迭代子实现,并不需要预知容器类型。11.3顺序容器顺序容器:vector,list和deque。vector类和deque类是以数组为基础的,list类是以双向链表为基础的。11.3.1矢量类11.3.2列表类11.3.3双端队列类11.
6、3.1矢量类矢量类的概念:矢量(vector)类提供了具有连续内存地址的数据结构。它可通过下标运算符[]直接有效地访问矢量的任何元素。与数组不同,vector的内存用尽时,vector自动分配更大的连续内存区,将原先的元素复制到新的内存区,并释放旧的内存区。这是矢量类的优点。内存分配由分配子(Allocator)完成。分配子也是类,它运用了new和delete运算符,本教材不作进一步讨论。矢量类的迭代子:每个容器都有自己所支持的迭代子类型,迭代子决定了可采用哪种算法。vector支持随机访问迭代子,具有最强的功能
7、。vector的迭代子通常实现为vector元素的指针。所谓选择容器类,实际上很大部分是选择所支持的迭代子。11.3.1矢量类矢量容器的声明:#include……vectorvi;//定义存放整形序列的向量容器对象vi,长度为0的空vectorvectorvf;//存放实型序列的向量容器vectorvch;//存放字符序列的向量容器vectorvstr;//存放字符串序列的向量容器11.3.1矢量类矢量容器的构造函数:vector(size_tn)
8、;//构造一个有n个元素的矢量,//每个元素都是由默认的构造函数所建立的vector(size_tn,T&V);//T表示矢量的基本类型,如int;//为每个元素用同一个对象V来赋初值vector(first,last);//元素的初值由区间[first,last)指定的序列中的元素复制而来vector(vector&X)//复制构造函数这些构造函数还可以显式给出分
此文档下载收益归作者所有