泛型编程与stl,什么是模板,STL与泛型编程

我觉得学一个东西不应该拿起来就学,应该先大概明白这个东西是干什么用的,用它有什么好处,以终为始,就像高考一样,如果不知道最后的目的是考大学,我想就不会有那么多同学辛苦奋斗,当明白了高考的目的是上一个好大学时,同学们有动力才为之奋斗,有方向才有行走的动力!
最近在学C++(以前学的等于没学。。。),除了面向对象中多态、重载之外,就数模板、STL、泛型编程这些概念比较难懂,所以想先明白这些东西是什么,有什么用,学起来才清晰。下面开始:
从范围上来说:模板 < STL < 泛型编程
模板
模板说到底就是将类型参数化,软件开发中最大的不变是变化,因此在使用一种逻辑结构来组织数据时,并不清楚存放的数据到底是什么类型的,例如链表中存放的数据。在C语言中将数据保存成通用指针void *,使用的时候再根据要求进行对应的强制类型转换,而C++作为C语言的进化(个人感觉语言都是在一步步进化,或者解决某种语言的缺点),语言本身开始解决这种问题,于是模板出现了:对于一种结构,现将其逻辑架构和方法建立起来,对于具体的数据类型,在使用的时候再提供,由编译器来负责替换参数。
通过使用模板可以使程序具有更好的代码重用性。记住,模板是对源代码进行重用,而不是通过继承和组合重用对象代码,当用户使用模板时,参数由编译器来替换。模板由类模板和函数模板二部分组成,以所处理的数据类型的说明作为参数的类就叫类模板,而以所处理的数据类型的说明作为参数的函数叫做函数模板。模板参数可以由类型参数或非类型参数组成,类型参数可用class和typename关键字来指明,二者的意义相同,都表示后面的参数名代表一个潜在的内置或用户定义的类型,非类型参数由一个普通参数声明构成。
STL
STL是standard template library的英文缩写,即标准模板库。上面刚提到模板的目的是为了更好的代码重用,而库就是集合,因此模板库就可以理解成许多模板的集合,里面包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法,而又因为是标准,里面的数据结构和算法都是具有工业强度的、高效的,所以标准模板库(STL)为广大C++程序员们提供了一个可扩展的应用框架,这样C++程序员就可以在开发过程中不用重复大量的基本数据结构和基本算法,同时又保证了其正确和高效,大大的提高了开发效率。
STL巨大,而且可以扩充,它包含很多计算机基本算法和数据结构,而且将算法与数据结构完全分离,其中算法是泛型的,不与任何特定数据结构或对象类型系在一起。STL以迭代器(Iterators)和容器(Containers)为基础,是一种泛型算法(Generic Algorithms)库,容器的存在使这些算法有东西可以操作。STL包含各种泛型算法(algorithms)、泛型指针(iterators)、泛型容器(containers)以及函数对象(function objects)。STL并非只是一些有用组件的集合,它是描述软件组件抽象需求条件的一个正规而有条理的架构。
泛型编程
泛型编程和面向对象编程不同,它并不要求你通过额外的间接层来调用函数,它让你编写完全一般化并可重复使用的算法,其效率与针对某特定数据类型而设计的算法相同。所谓泛型(Genericity),是指具有在多种数据类型上皆可操作的含意,与模板有些相似。泛型编程的代表作品STL是一种高效、泛型、可交互操作的软件组件。
  
Tags:  stl标准模板库 java泛型编程 什么是泛型编程 泛型编程 泛型编程与stl

延伸阅读

最新评论

发表评论