有效地利用已有的成果,将经典的.优秀的算法标准化.模块化,从而提高软件的生产率,是软件产业化的需求,为了实现这一需求,不仅需要面向对象设计思想,而且需要泛型程序设计思想. c++语言提供的标准模板库(standard template library,STL)便是对象对象程序设计和泛型程序设计(Generic Programming)思想相结合的一个良好典范. 1.泛型程序设计的概念和术语 1)泛型程序设计 泛型程序设计就是要将程序写得尽可能通用,同时并不损失效率.它的首要目标是标准容器,进而是…
标准c++算法是通过迭代器和模板来实现的,其实算法本身就是一种函数模板. 算法从迭代器那里获得一个元素,而迭代器则知道一个元素在容器中的什么位置.迭代器查找元素的位置并将这些信息提供给算法以便算法能够访问这些元素.算法不必关心具体的元素存储在容器中什么位置的细节,通常情况下,算法也不必直到存储元素的容器的种类.算法只需要简单地申请一个元素就可以了,根本无须直到这个元素是什么或者这个元素可能存储在什么地方.这样的话一个标准的算法就可以处理几乎所有类型的容器,并且一个容器可以容纳几乎任何类型的元素.…
泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++模板为泛型编程程序设计奠定了关键的基础 模型:符合一个概念的数据类型称为该概念的模型,例如:int型是Comparable概念的模型: 静态数据类型不是Assignable概念的模型(无法用“=”给整个静态数组赋值) 用概念做模板参数名 很多STL的实现代码都是使用概念来命名模板参数的 为概念赋予一个名称,并使用这个名称作为模板参数名 表示insertionSort这样的一个函数模板的原型…
顺序容器类以逻辑线性排列方式存储元素,在这些容器类型中的元素在逻辑上被认为是连续的存储空间中存储的.顺序容器可用于存储线性群体. 在关联容器类中,元素的存储和检索基于关键字和元素与其他元素之间的关系,与顺序容器类的元素存储和检索方式完全不同. 对顺序容器的访问分为顺序或直接(也称随机)两种. 容器类库中向量和队列提供直接访问,而列表提供连续访问. 还有4种类型的关联容器:集合容器.多重集合容器.映射容器和多重映射容器.关联容器具有从基于链的集合中快速提取对象的能力.集合的大小可在运行时改变. 在…
理解迭代器对于理解STL框架并掌握STL的使用至关重要.简单地说,迭代器是面向对象版本的指针,STL算法利用迭代器对存储在容器中的元素序列进行遍历,迭代器提供了访问容器和序列中每个元素的方法. 虽然指针也是一种迭代器,但迭代器却不仅仅是指针.指针可以指向内存中的一个地址,通过这个地址就可以访问相应的地址.而迭代器更为抽象,它可以指向容器中的一个位置,我们也许不必关心这个位置的真正物理地址,但是我们可以通过迭代器访问这个位置的元素. 迭代器是算法和容器的“中间人”,遍历链表需要指针,对数组元素进行…
泛型程序设计的基本概念 编写不依赖于具体数据类型的程序 将算法从特定的数据结构中抽象出来,成为通用的 C++的模板为泛型程序设计奠定了关键的基础 术语:概念 用来界定具备一定功能的数据类型.例如: 将“可以比大小的所有数据类型(有比较运算符)”这一概念记为Comparable 将“具有公有的复制构造函数并可以用‘=’赋值的数据类型”这一概念记为Assignable 将“可以比大小.具有公有的复制构造函数并可以用‘=’赋值的所有数据类型”这个概念记作Sortable 对于两个不同的概念A和B,如果…
标准模板库STL 1.泛型程序设计 C++ 语言的核心优势之一就是便于软件的重用 C++中有两个方面体现重用: 1.面向对象的思想:继承和多态,标准类库 2.泛型程序设计(generic programming) 的思想: 模板机制,以及标准模板库STL 简单地说就是使用模板的程序设计法. 将一些常用的数据结构(比如链表,数组,二叉树)和算法(比如排序,查找)写成模板,以后则不论数据结构里放的是什么对象,算法针对什么样的对象,则都不必重新实现数据结构,重新编写算法.标准模板库 (Standard…
1. STL 基本介绍 C++ STL(标准模板库)是惠普实验室开发的一系列软件的统称,是一套功能强大的 C++ 模板类.STL的目的是为了标准化组件,这样就不用重新开发,让后来者可以使用现成的组件,和开源组件有点殊途同归. STL的版本很多,常见的有HP STL.PJ STL. SGI STL等,另外,STL库属于C++标准库的一部分,两者是包含关系. 由于我平时的编程环境主要在Linux系统下,所以在后面总结中,我会主以GNU ISO C++ Library中的STL源码(5.2.1版本)为…
1.泛型程序设计:将程序尽可能写的通用,将算法从特定的数据结构中抽象出来,成为通用的:C++模板为泛型程序设计奠定了关键的基础:STL是泛型程序设计的一个范例:容器container.迭代器iterator.算法algorithms和函数对象function object. 2.命名空间namespace:一个命名空间将不同的标识符集合在一个命名作用域(named scope)中,是为了解决命名冲突.没有声明命名空间的标识符都处在无名的命名空间中. 例如,声明一个命名空间NS:namspace…
标准模板库(STL,Standard Template Library)是C++标准库的重要组成部分,包含了诸多在计算机科学领域里所常见的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应用框架,高度体现了软件的可复用性. 1.STL简介 STL最初由惠普实验室开发,并于1998年被定义为国际标准,正式成为C++语言的标准库.在STL中采用了泛型编程的方法,泛型编程是通过模板来实现算法源代码,并将其用于不同数据类型的软件重用方法.从根本上说,STL是一些容器.算法和其他一些组件的集合…