冒号和他的学生们(连载9)——泛型范式 - 编程入门网
h;
“STL有三要素:算法(algorithm)、容器(container)和迭代器(iterator)。容器是数据的集合,可理解为抽象的数组;迭代器是算法与容器之间的接口,可理解为抽象的指针或者游标。”冒号讲述道,“算法串联数据,如脊贯肉;数据实化算法,如肉附脊。只有抽象出表面的数据,算法的脊梁才能显现。以上几题看似风马牛不相及,若运用泛型思维,便可发现它们的共性:对指定集合中满足指定条件的元素进行指定处理。用模板语言,寥寥数行即勾勒完毕。” 问号诧异道:“相比前面的max模板,这里连元素的数据类型T都不见了?” 冒号回答:“元素被容器封装了。” 问号追问:“可这里连容器也看不到啊?” 冒号料有此问:“容器通过它的迭代器参与算法。” 句号豁然开朗:“通过模板,泛化了容器——可以是数组、列表、集合、映射、队列、栈、字符串等等;泛化了元素——可以是任何数据类型;泛化了处理方法和限定条件——可以是任何函数。” 冒号提醒道:“补充两点:处理方法和限定条件不限于函数,还可以是函子(Functor)——自带状态的函数对象;另外还有一个隐蔽的泛化:迭代器——可以从前往后移动,可以从后往前移动,可以随机移动,也可以按任意预先定义的规律移动。” 叹号由衷感叹:“果然强悍啊!” 逗号倒也心细:“最后一题中标准输入也算容器吗?” “为什么不呢?只要一个对象配备了迭代器,它就算容器。I/O流上就有现成的迭代器,当然你也可以自行定制。”冒号目光转向句号,“现在还有人说泛型编程渗透性不强吗?” 句号腆然一笑。 “这只是泛型编程的冰山一角。重要的是,我们不是在玩弄花哨的技巧,而是在用一种新的视角去审视问题。”冒号总结道,“泛型编程是算法导向(Algorithm-Oriented)的,即以算法为起点和中心点,逐渐将其所涉及的数据结构内涵模糊化、外延扩大化,从而扩展算法的适用范围。这非常类似数学思维——当数学家证明完一个定理后,总会试图在保持核心思想的前提下,尽可能地放宽题设,增强结论,从而推广定理。外行人以为数学定理最重要,其实数学思想才是数学的精髓,在数学家眼里,思想是鸡,结论是蛋。这也无怪乎STL会出自一位学数学的人之手了。” |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |