C++程序设计--对象分册(第7章).ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《C++程序设计--对象分册(第7章).ppt》由会员分享,可在线阅读,更多相关《C++程序设计--对象分册(第7章).ppt(56页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第7章章 标准模板库标准模板库STL介绍及应用介绍及应用 n本章学习重点掌握内容:本章学习重点掌握内容:n标准模板库标准模板库STL的基本概念的基本概念 n标准模板库标准模板库STL的组成部分的组成部分n命名空间的概念及使用命名空间的概念及使用n容器的概念和使用容器的概念和使用 n迭代器的概念和使用迭代器的概念和使用n算法的概念和使用算法的概念和使用n标准模板库标准模板库STL的应用的应用 12/17/20221第第7章章 标准模板库标准模板库STL介绍及应用介绍及应用n7.1 标准模板库标准模板库STL的概念的概念 n7.2 命名空间命名空间 n7.3 容器(容器(Container)n7
2、.4 迭代器(迭代器(Iterator)n7.5 算法(算法(Algorithm)n7.6 综合应用实例综合应用实例 12/17/202227.1 标准模板库标准模板库STL的概念的概念 nSTL最初是由惠普实验室开发的一系列组件,是标准C+库的重要补充之一。n从逻辑层次来看,STL体现了泛型程序设计的思想,引入了多个新的名词,比如容器、算法、迭代器等。n在STL中,几乎所有的代码都采用了类模板和函数模板的方式,因而,提供了更好的代码重用机会。n从广义上讲,STL的代码分为三类:容器、迭代器和算法。这3类代码被组织为13个头文件。12/17/202237.1.2 STL和和C+标准的关系标准的
3、关系输入输入/输输出出数值数值诊断诊断通用工具通用工具国际化国际化语言支持语言支持容器容器算法算法迭代器迭代器字符串字符串STLC+标准库标准库C标标准准函函数数STL和和C+标准库的关系标准库的关系12/17/202247.1.3 STL组成部分组成部分函数对象函数对象通用算法通用算法assistSTL容器容器迭代器迭代器supportsapply toaccessuseuse STL结构图结构图12/17/202257.1.3 STL组成部分组成部分n1容器 能够保存其它类型的对象的类。C+的容器可以包含混合类型的对象,也就是说容器类可以包含一组相同类型或一组不同类型的对象。当容器类包含相
4、同类型的对象时,称为同类容器类;当容器类包含不同类型的对象时,称为异类容器类。n2迭代器 迭代器从作用上来说是STL最基本的部分,但理解起来比较困难。简单的说,迭代器是指针的泛化,它允许程序员以相同的方式处理不同的数据结构(容器)。迭代器是算法访问容器的中介。12/17/202267.1.3 STL组成部分组成部分n3算法 一个按照一组定义明确的步骤来解决某个问题的处理过程,理论上,它不依赖于任何特定的计算机编程语言。STL提供了大约70个实现算法的函数模板。n4函数对象 所谓函数对象是定义了函数调用操作符的对象。在使用STL时,经常需要把函数对象作为算法的输入参数或实例化一个容器(conta
5、iner)时的输入参数。12/17/202277.1.4 STL对对C+的影响的影响n在STL之前,C+支持三种基本的编程样式面向过程编程、数据抽象和面向对象编程。n在STL出现之后,C+可以支持一种新的编程模式泛型程序设计。nSTL并不完美,但是,它开辟了程序设计的新天地,它拥有的影响力甚至于超过了巨大的C+群体。12/17/202287.2 命名空间命名空间 n在实际开发过程中,经常需要引入对象、函数、类、类型或其它的全局实体。在同一个项目中,即使不在同一个文件中定义或声明,这些全局实体也必须有一个唯一的名字。n这也意味着当程序员使用开发商提供的库时必须保证程序中的全局实体不和开发商提供的
6、库中的全局实体名字冲突,这将是一件非常枯燥和困难的事情。n为了解决名字冲突的问题,C+引入命名空间机制。12/17/202297.2.1 命名空间的定义命名空间的定义定义命名空间的语法格式如下:namespace 命名空间名 声明序列 其中,namespace是关键字,后面是命名空间名。命名空间名必须在它被定义的作用域中具有唯一的名字,否则会产生错误。在命名空间名后一对花括号“”括起来的是声明序列。所有可以出现在全局作用域的定义或声明都可以放在其中。12/17/2022107.2.1 命名空间的定义命名空间的定义namespace myNameSpace string myStr=myStr;
7、class myClass public:myClass();/类的其它部分 ;void myFunc()int myCount=0;extern exFun();/其它实体定义或声明12/17/2022117.2.1 命名空间的定义命名空间的定义 定义或使用命名空间需要注意下面几个方面:(1)namespace只能在全局范畴定义,但它们之间可以互相嵌套,即在命名空间定义内容定义一个新的命名空间。(2)在namespace定义的结尾,大括号的后面不必要跟一个分号。(3)一个namespace可以在多个头文件中用一个标识符来定义。(4)一个namespace的名字可以用另一个名字做它的别名。(5
8、)不能像类那样去创建一个命名空间的实例。(6)可以通过多次声明和定义同一命名空间,把新的成员名称加入到已有的命名空间之中去。12/17/2022127.2.2 命名空间的使用命名空间的使用 对命名空间中成员的引用,需要使用命名空间的域操作符:。【例7.1】使用命名空间的例子。#include#include using namespace std;/两个在不同命名空间中定义的名字相同的变量namespace mySpace1/自定义命名空间 string myStr=myStr1;namespace mySpace2 string myStr=myStr2;12/17/2022137.2.2
9、命名空间的使用命名空间的使用void main()/用命名空间域操作符mySpace1:访问变量myStr coutHello,mySpace1:myStr.goodbye!endl;/用命名空间域操作符mySpace2:访问变量myStr coutHello,mySpace2:myStr.goodbye!endl;12/17/202214n为了避免麻烦,可以使用C+的using编译指令来简化对命名空间中的名称的使用。语法格式为:using namespace 命名空间名:命名空间名;中括号中的可选部分是指定命名空间中嵌套的子命名空间时使用的。有了using指令后,在编写程序时就可以使用usi
10、ng指令,而不用每次都使用“命名空间名:”来限定要访问的实体。7.2.2 命名空间的使用命名空间的使用12/17/202215#include#include using namespace std;namespace myNameSpace1 string myStr1=myStr1;namespace myNameSpace2 string myStr2=myStr2;using namespace myNameSpace1;using namespace myNameSpace1:myNameSpace2;void main()coutHello,myStr1.goodbye!endl;
11、coutHello,myStr2.goodbye!endl;【例7.2】用using指令使用命名空间的例子。12/17/2022167.2.3 无名空间无名空间 有时,定义的全局实体只在程序的一小段代码中使用,有时,定义的全局实体只在程序的一小段代码中使用,而在其它地方不会使用。为了保证这些全局实体不和而在其它地方不会使用。为了保证这些全局实体不和项目其它地方的全局实体冲突,可以使用无名空间。项目其它地方的全局实体冲突,可以使用无名空间。无名空间声明的语法格式如下:无名空间声明的语法格式如下:namespace 声明序列声明序列 namespace后不跟命名空间名字,直接用一对后不跟命名空间名
12、字,直接用一对“”括住声明序列,就定义了一个无名空间。括住声明序列,就定义了一个无名空间。12/17/2022177.2.3 无名空间无名空间 【例7.3】使用无名空间的例子。#include#include using namespace std;namespace void func1()cout调用了func1()endl;void func2()cout调用了func2()endl;void main()cout测试无名空间的例子!endl;func1();/无名空间中定义的函数 func2();/无名空间中定义的函数12/17/202218 标准C+库中的所有组件都定义在一个称为st
13、d 的命名空间中,因此,std又称为标准命名空间。在编写程序时,如果需要使用标准C+的组件,在包含相应的标准C+头文件后,可以采用下面几种方法使用头文件中声明的函数对象、类模板等。(1)使用域操作符std:(2)使用编译指令using namespace std;(3)使用编译指令using namespace std:进行更具体的限制,如using namespace std:string。7.2.3 标准命名空间标准命名空间std12/17/2022197.3 容器(容器(Container)7.3.1 容器简介 容器是能够保存其它类型的对象的类。C+的容器可以包含混合类型的对象,也就是说
14、容器类可以包含一组相同类型或一组不同类型的对象。容器类包含相同类型的对象时,称为同类容器类;容器类包含不同类型的对象时,称为异类容器类。容器类库共包括十种容器,分为三大类,分别如下:(1)顺序容器:向量、双队列、列表;(2)关联容器:集合、多重集、映射和多重映射;(3)容器适配器:堆栈、队列和优先队列。12/17/2022207.3 容器(容器(Container)根据使用迭代器的不同可以将容器分为4类:(1)前向容器:一种采用前向迭代器的容器,它和容器相比没有什么区别,只是前向容器只能使用前向迭代器。(2)双向容器:双向容器继承于前向容器,它除了具有前向迭代器外,还具有逆向迭代器。可以双向访
15、问容器中的元素。(3)序列容器:序列是一种长度可变的容器,向量中的元素按照线性关系排列和存储。它直接继承于前向容器。(4)关联容器:关联容器也是一种长度可变的容器,它支持高效的数据查询和数据操作。它由前向容器衍生而来。12/17/2022217.3 容器(容器(Container)容器名描述类型头文件向量连续存储元素的数组。顺序容器列表由结点组成的双向链表,每个结点包含一个元素顺序容器双队列连续存储的指向不同元素的指针所组成的数组。顺序容器集合由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序。关联容器多重集合允许存在两个次
16、序相等的元素的集合。关联容器12/17/202222容器名描述类型头文件栈后进先出的值的排列。容器适配器队列先进先出的值的排列。容器适配器优先队列元素的次序是由作用于所存储的值对上的某种谓词决定的一种队列。容器适配器映射由键,值对组成的集合,以某种作用于键对上的谓词排列。关联容器多重映射允许键对有相等的次序的映射。关联容器7.3容器(容器(Container)12/17/2022237.3.2 容器的结构容器的结构 所有的STL容器都是定义在命名空间std中的一个模板类,由、和七个头文件给出。主要包括下面3个方面。n1.常用的类型n2.常用的函数n3.vector和list基本结构 12/17
17、/202224类型名值的类型描述value_type值类型容器中存放元素的类型size_type长度用于计算容器中项目数和检索顺序容器的类型(不能对list检索)difference_type距离引用相同容器的两个迭代器相减结果的类型(list和关联容器没有定义operator-)iterator迭代器指向容器中存放元素类型的迭代器const_iterator常迭代器指向容器中存放元素类型的常量迭代器,只能读取容器中的元素7.3.2 容器的结构容器的结构 顺序容器和关联容器中常用的typedef 12/17/202225reverse_iterator逆向迭代器指向容器中存放元素的逆向迭代器,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- C+ 程序设计 对象 分册
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内