浅谈C++STL

在学习java集合类之后,回头看C++的STL,不得不感叹前辈们的聪明才智。首先说概念和模型这两个名词的定义,概念(concept)广义的说是人类在认识过程中,从感性认识上升到理性认识,把所感知的事物的共同本质特点抽象出来,加以概括,是本我认识意识的一种表达。而在程序设计过程中,我们把这种共同本质认为是满足一定关系代数运算的范畴,那么概念就是从各个类中抽象出来的满足一定关系代数运算的 规范。与继承关系相仿,概念之间也存在包含与被包含的关系,一个概念可以在另一个概念的基础上定义出来。这种便捷的定义方法在程序设计过程中称为强化(refinement).在stld中概念有基础性概念,容器概念,迭代器概念以及函数对象概念,每一种概念对应何种关系代数,读者可以参考《C++STL开发技术导引》,而模型是对概念的具体化过程,即满足特定关系代数运算的范畴,例如vector,list,deque,set,map,hash_map,vector迭代器等等。概念具有共性,而模型具有个性,从众多个性抽象出公共的部分,便变成了概念,而把共性具体化的便是派生个性的过程.(与继承有点相似)。与Java的集合机制不一样,C++把算法实现独立于容器模型,由迭代器把容器的数据传递给算法,由算法负责调用函数对象进行处理,迭代器再把处理结果记录到容器中。整个过程完全将数据,调用,操作独立出来,使具有相同的操作逻辑不同数据类型的程序可以独立出来,在各自的基础上通过泛化技术完成各自的功能,使之具备高类聚的特性,而两者之间的耦合是通过迭代器进行数据耦合,满足低耦合的要求,当我们在满足指定的概念所具备的关系代数运算时,我们便可任意扩展我们的模型,也就是容器,比如队列,栈,循环队列等等,通常我们把基于一个概念,并对这个概念做本分限制的过程称为适配过程(adapter)。同样我们可以基于现有的容器扩展我们的数据处理逻辑,自己定义函数对象类。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值