冒号课堂节选:泛型范式

泛型范式

Generic Programming ,简称 GP 其基本思想是:将算法与其作用的数据结构分离,并将后者尽可能泛化,最大限度地实现算法重用。 这种泛化是基于模板的参数多态( parametric polymorphism ),相比 OOP 基于继承的子类型多态( subtype polymorphism ),不仅普适性更强,而且效率也更高。这不能不说是一种异数 —— 我们知道,普适性往往是以效率为代价的。 GP 最著名的代表是 C++ 中的 STL

STL 有三要素:算法( algorithm )、容器( container )和迭代器( iterator )。容器是数据的集合,可理解为抽象的数组;迭代器是算法与容器之间的接口,可理解为抽象的指针或者游标。 算法串联数据,如脊贯肉;数据实化算法,如肉附脊。只有抽象出表面的数据,算法的脊梁才能显现。

泛型范式的常见应用:对指定集合中满足指定条件的元素进行指定处理。

示例:

template <class Iterator, class Act, class Test>

void process(Iterator begin, Iterator end, Act act, Test test)

// 对容器中在给定范围内(即起于 begin 止于 end )所有满足给定条件的元

// 素(即 test (元素) ==true )进行处理(即 act (元素))

{

   for ( ; begin != end; ++begin)    // 从头至尾遍历容器内元素

        if (test(*begin)) act(*begin); // 若当前元素满足条件,则对其采取行动

}

 

例子说明:通过模板,泛化了容器 —— 可以是数组、列表、集合、映射、队列、栈、字符串等等;泛化了元素 —— 可以是任何数据类型;泛化了处理方法和限定条件 —— 可以是任何函数。此外,处理方法和限定条件不限于函数,还可以是函子 Functor —— 自带状态的函数对象;另外还有一个隐蔽的泛化:迭代器 —— 可以从前往后移动,可以从后往前移动,可以随机移动,也可以按任意预先定义的规律移动。

 

泛型编程是算法导向( Algorithm-Oriented )的,即以算法为起点和中心点,逐渐将其所涉及的数据结构内涵模糊化、外延扩大化,从而扩展算法的适用范围。 这非常类似数学思维 —— 当数学家证明完一个定理后,总会试图在保持核心思想的前提下,尽可能地放宽题设,增强结论,从而推广定理。外行人以为数学定理最重要,其实数学思想才是数学的精髓,在数学家眼里,思想是鸡,结论是蛋。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值