什么是stl?什么是template?其实之所以要有stl,要有GP,那是因为对于一些不同类型的数据,他们常常有一些相同的操作,比如同一类型的两个数据之间相加,相减。而我们常常对不同类型的数据又会有一些相同的操作的过程,或者我喜欢称为有顺序的一组操作集合, 这个过程中,除了对象的类型不一样,其他的都一样,而这个过程,又会有很高的复用性,这个时候,人们就产生了一个这样的想法,把这个过程抽象出来。而前面说的不同数据对象之间相同的操作的定义,就是这个抽象的基础。
比如说对于查找这样一种操作,几乎所有的对象都会用到,这个时候我们能不能把他抽象成一个函数呢?当然可以,只要对需要作用的对象类型定义上相等这一操作,再加上别的操作,就可以把这种对这种对象的查找操作集中到一个已经写好的模板函数中去。这样,不仅实程序再空间上效率提高了,而且在理解上更加方便了,所以这里我们理所当然可以想到泛型了,对于不同类型,把作用于他们的算法泛化,就是泛型的思想了。stl中的containers,algorithms,iterators等等就是基于这样一种思想。
其实多态也是GP 的一种实现方法,而我还在思考多态与stl对泛型的支持的不同。比如对于不同的数据,我们分别定义和声明他们的加法的实现,那么对于这一个加法的符号,我们就可以随时的作用于这些不同的型之上,这不就是一种泛型吗?这个于template又有什么不同呢?我目前想到的只是template是实现在一个函数里面的,而多态是需要多个函数来实现的。至于其他的,只有等我下一步来理解了,呵呵。
比如说对于查找这样一种操作,几乎所有的对象都会用到,这个时候我们能不能把他抽象成一个函数呢?当然可以,只要对需要作用的对象类型定义上相等这一操作,再加上别的操作,就可以把这种对这种对象的查找操作集中到一个已经写好的模板函数中去。这样,不仅实程序再空间上效率提高了,而且在理解上更加方便了,所以这里我们理所当然可以想到泛型了,对于不同类型,把作用于他们的算法泛化,就是泛型的思想了。stl中的containers,algorithms,iterators等等就是基于这样一种思想。
其实多态也是GP 的一种实现方法,而我还在思考多态与stl对泛型的支持的不同。比如对于不同的数据,我们分别定义和声明他们的加法的实现,那么对于这一个加法的符号,我们就可以随时的作用于这些不同的型之上,这不就是一种泛型吗?这个于template又有什么不同呢?我目前想到的只是template是实现在一个函数里面的,而多态是需要多个函数来实现的。至于其他的,只有等我下一步来理解了,呵呵。