第8章STL模板库.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第8章 STL模板库 杨琦 西安交通大学 计算机教学实验中心 提纲 1. 类模板原理 2. STL标准模板库简介 3. 顺序容器 4. 关联容器 5. 容器适配器 6. 迭代器 7. 泛型算法 8.1 类模板原理 1.假如设计一个求两参数最大值的函数,在实践中我们可能需要定义四个函数: int max ( int a , int b ) { return ( a b ) ? a , b ; } long max ( long a , long b ) { return ( a b ) ? a , b ;} double max ( double a , double b ) { return ( a b)? a , b ; } char max ( char a , char b ) { return ( a b ) ? a , b ;} 2.这些函数几乎相同,唯一的区别就是形参类型不同 3.需要事先知道有哪些类型会使用这些函数,对于未知类型这些函数不起作用 【例8-1】定义一个类类型AnyType,该类有两个数据成员x和y,它们的数据类型可以是int、double或char,编写并测试该类模板。 #include iostream using namespace std; template class T class AnyType { T x, y; public: AnyType(T a, T b): x(a), y(b){} T GetX(){return x;} T GetY(){return y;} }; 测试用主函数 int main() { AnyType int i (1, 2); AnyType double d (1.5, 2.7); AnyType char c (a, b); AnyType char * s (Hello, template class); cout 整型类: i.GetX() , i.GetY() endl; cout 双精度类: d.GetX() , d.GetY() endl; cout 字符类: c.GetX() , c.GetY() endl; cout 字符串类: s.GetX() , s.GetY() endl; return 0; } 运行结果: 整型类:1, 2 双精度类:1.5, 2.7 字符类:a, b 模板优缺点 C++ 优势之一就是便于软件的重用 C++中有两个方面体现重用: 1. 面向对象的思想:继承和多态,标准类库 2. 泛型程序设计(generic programming) 的思想:模板机制,以及标准模板库 STL 缺点,调试比较困难 一般先写一个特殊版本的函数 运行正确后,改成模板函数 8.2 STL标准模板库简介 泛型程序设计,简单地说就是使用模板的程序设计法。 将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法。 标准模板库 (Standard Template Library) 就是一些常用数据结构和算法的模板的集合。主要由 Alex Stepanov 开发,1994年为草案,1998年被添加进C++标准 有了STL,不必再从头开始编写繁多的标准数据结构和算法,并且一样可获得非常高的性能。 STL中的几个基本概念 容器:可容纳各种数据类型的多元素数据结构。 迭代器:可依次存取容器中元素的东西(指针?下标?) 算法:用来操作容器中的元素的函数模板。例如,STL用sort()来对一个vector中的数据进行排序,用find()来搜索一个list中的对象。 图8-1 向量(vector)模板结构示意图 表8-2 vector容器常用成员函数 【例8-2】输入若干实数,然后利用模板vector计算这些数据的和及中间值 #include iostream #include vector #include algorithm using namespace std; int main() { vector double A; double temp; while(cintemp) //输入直到非double类型 A.push_back(temp); //向量自动增加空间 double sum=0; for(int i=0;iA.size();i++) sum+=A[i]; cout向量A的和为:sumendl; 列表(list)容器 【例8-3】 向列表中添加字符串数据,然后按字母顺序

文档评论(0)

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

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

1亿VIP精品文档

相关文档