STL入门导入STL的概念与组成Iterator(迭代器)Container(容器)Algorithm(算法)Adaptors(配接器)导入抽象的重要性–计算机科学的重要进步,许多是由于发掘了新的抽象性质而促成的–面向过程->基于对象->面向对象->泛型导入面向过程(Procedure-Oriented)的抽象–抽象出Procedure(Function)的概念,把程序分成若干个子过程。将事物的方法隐藏于各个函数内--C语言。–适用于处理小型的程序。对大型程序,子程序之间关系复杂,不易处理变化的需求--引发软件危机的原因--需要新的抽象。耦合度变化总是存在的导入面向过程示例调用子过程时不用考虑其实现细节。导入基于对象(Object-Based)的抽象–引入抽象数据类型(ADT,AbstractDataType)。C++的类,将事物的属性与方法紧密地结合在一起--VB、带类的C。–与面向过程相比,可以更好地处理变化,一定程度上化解了软件危机。但各个类之间的关系不容易处理,而且程序代码数量比面向过程时更大--需要新的抽象。导入示例Person是一个抽象数据类型强内聚,低耦合。导入面向对象(Object-Oriented)的抽象–抽象出封装、继承、多态(polymorphic)的概念。–与基于对象相比,有更多的间接性。运用多态,我们可以调用某种方法,而不用指定此方法所属的类型。因而达到更进一步的抽象性。–它为我们带来了什么?--MFC(用面向对象技术封装WindowsAPI,抽象出一个类体系)导入示例对用户封装了具体的类型,用户只需和抽象类打交道MFC类体系图物体类窗口类视图类边框类ApplicationFramework导入泛型(Generic)的概念–Generic是一种抽象就如OO是一种抽象。–还没有语法与之相对应--正在开发中。(Function、Class、D:publicB)–它为我们带来了什么?--STL。STL的概念何为STL?–STL(StandardTemplateLibrary)是C++标准庫的一部分(80%),是用C++Template机制来表达泛型的庫。–STL(StandardTemplateLibrary)是用泛型技术来设计完成的实例就如MFC(MicrosoftFoundationalClasses)是用面向对象技术来设计完成的实例STL的概念STL抽象的是什么?–有些算法并不依赖于数据结构的特定实现,而只是依赖于该结构的几个基本的语义属性.–STL抽象出这些基本属性(Concept),成功的将算法与数据结构分离,在没有效率损失的前提下,得到了及大的弹性。STL的概念示例用一个泛型算法可以处理多种数据结构。而且在获得弹性的同时运行效率上和以前相比没有损失。STL的组成六大组件–容器(Container)–算法(Algorithm)–迭代器(Iterator)–仿函数(Functionobject)–适配器(Adaptor)–空间配制器(allocator)STL的六大组件全都是抽象出来的ConceptsSTL的组成STL在哪里?–后缀名?–Namespacestd定义并初始化一个list容器对区间内每个元素调用传入的操作pfiCopy是一个泛型算法,它将文件中的内容显示到屏幕上相关资料STL之父访谈录--详细介绍了STL的历史,点明了STL的设计宗旨以及它与OO的关系。复习C++Template机制。习题:–STLexample1、STLexample2新的语言特性Namespace(名字空间)Template的新特性新的类型转换运算符命名空间(Namespace)现在的软件多以程序庫、模块、组件拼凑而成,名称冲突问题越来越严重。Namespace就是用来解决此问题的。Namespace将不同的标识符号集合在一个具体的名称范围内。命名空间(Namespace)Namespace的名字和标识符号间以::分隔(类似于Class与members之间)命名空间(Namespace)与类不同的是,Namespace是开放的。可以在不同模块之间定义和扩展namespace。因此可以用namespace来定义模块、程序庫或组件。命名空间(Namespace)usingdeclaration,我们可以避免一再写出冗长的namespace名称usingdirective这就是一个usingdeclaration,它使I成为当前范围内代表Renwind::I的同义词。这就是一个usingdirective,它使Renwind内的所有名字曝光。命名空间(Namespace)usingdirective会再度引发名称冲突调用哪一个i呢?这种写法只适用于写示例程序或相对小的程序Template的新特性类模板显示特化(classtemplateexplicitspecializat...