蚂蚁文库
换一换
首页 蚂蚁文库 > 资源分类 > DOCX文档下载
 

STL标准模板库小结

  • 资源ID:53133950       资源大小:113.01KB        全文页数:21页
  • 资源格式: DOCX        下载权限:游客/注册会员    下载费用:15积分 【人民币15元】
快捷注册下载 游客一键下载
会员登录下载
三方登录下载: 微信快捷登录 QQ登录  
下载资源需要15积分 【人民币15元】
邮箱/手机:
温馨提示:
支付成功后,系统会自动生成账号(用户名和密码都是您填写的邮箱或者手机号),方便下次登录下载和查询订单;
支付方式: 微信支付    支付宝   
验证码:   换一换

 
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,既可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰   

STL标准模板库小结

STL就是Standard Template Library,标准模板库。这可能是一个历史上最 令人兴奋的工具的最无聊的术语。从根本上说,STL是一些“容器”的集合,这 些“容器有list, vector,set,map等,STL也是算法和其它一些组件的集合。这 里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。是C标 准库的一个重要组成部分,它由Stepanov and Lee等人最先开发,它是与C 几乎同时开始开发的;一开始STL选择了 Ada作为实现语言,但Ada有点不争 气,最后他们选择了 C , C 中已经有了模板。STL又被添加进了 C库。 1996年,惠普公司又免费公开了 STL,为STL的推广做了很大的贡献。STL提供 了类型安全、高效而易用特性的STL无疑是最值得C程序员骄傲的部分。每一 个C程序员都应该好好学习STLo大体上包括container (容器)、algorithm (算法)和iterator (迭代器),容器和算法通过迭代器可以进行无缝连接。 一、基础知识 1、泛型技术 泛型技术的实现方法有多种,比如模板,多态等。模板是编译时决定,多态是运 行时决定,其他的比如RTTI也是运行时确定。多态是依靠虚表在运行时查表实 现的。比如一个类拥有虚方法,那么这个类的实例的内存起始地址就是虚表地址, 可以把内存起始地址强制转换成int*,取得虚表,然后(int*)*(int*)取得虚表里的 第一个函数的内存地址,然后强制转换成函数类型,即可调用来验证虚表机制。 泛型编程(generic programming,以下直接以GP称呼)是一种全新的程序设 计思想,和0。,OB, P0这些为人所熟知的程序设计想法不同的是GP抽象度 更高,基于GP设计的组件之间偶合度底,没有继承关系,所以其组件间的互交 性和扩展性都非常高。我们都知道,任何算法都是作用在一种特定的数据结构上 的,最简单的例子就是快速排序算法最根本的实现条件就是所排序的对象是存贮 在数组里面,因为快速排序就是因为要用到数组的随机存储特性,即可以在单位 时间内交换远距离的对象,而不只是相临的两个对象,而如果用联表去存储对象, 由于在联表中取得对象的时间是线性的即0[n],这样将使快速排序失去其快速 的特点。也就是说,我们在设计一种算法的时候,我们总是先要考虑其应用的数 据结构,比如数组查找,联表查找,树查找,图查找其核心都是查找,但因为作 用的数据结构不同将有多种不同的表现形式。数据结构和算法之间这样密切的关 系一直是我们以前的认识。泛型设计的根本思想就是想把算法和其作用的数据结 构分离,也就是说,我们设计算法的时候并不去考虑我们设计的算法将作用于何 种数据结构之上。泛型设计的理想状态是一个查找算法将可以作用于数组,联表, 树,图等各种数据结构之上,变成一个通用的,泛型的算法。 2、四种类型转换操作符 static_cast将一个值以符合逻辑的方式转换。应用到类的指针上,意思是说它 允许子类类型的指针转换为父类类型的指针这是一个有效的隐式转换,同时, 也能够执行相反动作转换父类为它的子类。 例如float x; Countstatic_cast int x;//把 x 作为整型值输出 dynamic_cast将多态类型向下转换为其实际静态类型。只用于对象的指针 和引用。当用于多态类型时,它允许任意的隐式类型转换以及相反过程。 dynamic_cast会检查操作是否有效。也就是说,它会检查转换是否会返回一个 被请求的有效的完整对象。检测在运行时进行。如果被转换的指针不是一个被请 求的有效完整的对象指针,返回值为NULL. 例如class Car; class Cabrioletpublic Car{ }; class Limouslinepublic Car{ }; void fCar *cp { Cabriolet *p dynamic_cast Cabriolet cp; } reinterpret_cast转换一个指针为其它类型的指针。它也允许从一个指针转换为整 数类型。反之亦然。这个操作符能够在非相关的类型之间转换。操作结果只是简 单的从一个指针到别的指针的值的二进制拷贝。在类型之间指向的内容不做任何 类型的检查和转换。 例如 class A {}; class B {}; A * a new A; B * b reinterpret_castB *a; const_cast 一般用于强制消除对象的常量性。 例如 class C {}; const C *a new C; C *b const_castC *a; 其它三种操作符是不能修改一个对象的常量性的。 3、explicit修饰的构造函数不能担任转换函数。在很多情况下,隐式转换是有意的, 并且是正当的。但有时我们不希望进行这种自动的转换。 例如为了避免这样的隐式转换,应该象下面这样显式声明该带单一参数的构造函数 class String int size; char *p; //.. public //不要隐式转换 explicit String int sz; String const char *s, int size n 0; // 隐式转换 }; void f { String s10; s 100; 〃现在编译时出错;需要显式转换 s StringlOO; 〃好;显式转换 s st;〃好;此时允许隐式转换 4、命名空间namespace 解决在使用不同模块和程序库时,出现名称冲突问题。 5、京标准程序库中的通用工具。由类和函数构成。这些工具包括 数种通用类型 一些重要的C函数 数值极值 二、STL六大组件 容器Container 算法Algorithm 迭代器Iterator 仿函数Function object 适配器Adaptor 空间配置器allocator 1、容器 作为STL的最主要组成部分容器,分为向量vector,双端队列deque, 表list,队列queue,堆栈stack,集合set,多重集合multiset, 映射map,多重映射multimap。 容器 特性 所在头文件 向量vector 可以用常数时间访问和修改任意元素,在序列尾 部进行插入和删除时,具有常数时间复杂度,对 任意项的插入和删除就有的时间复杂度与到末尾 的距离成正比,尤其对向量头的添加和删除的代 价是惊人的高的 vector 双端队列deque 基本上与向量相同,唯一的不同是,其在序列头 部插入和删除操作也具有常量时间复杂度 deque 表 list 对任意元素的访问与对两端的距离成正比,但对 某个位置上插入和删除一个项的花费为常数时 间。 list

注意事项

本文(STL标准模板库小结)为本站会员(aaakkpc)主动上传,蚂蚁文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知蚂蚁文库(发送邮件至2303240369@qq.com或直接QQ联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们


网站客服QQ:2303240369

copyright@ 2017-2027 mayiwenku.com 

网站版权所有  智慧蚂蚁网络

经营许可证号:ICP备2024020385号



收起
展开