关于STL容器实现,非侵入式容器+Iterator框架和“侵入式”容器实现的思考

本文探讨了STL容器实现中的非侵入式容器与Iterator框架,以及“侵入式”容器设计,如Java中的基于Object的容器。作者指出,虽然基于Object的容器在Java中并非真正“侵入”,但存在转型和性能开销问题。STL的模板和typename关键字虽然提供了泛型的优势,但在代码可读性方面有所欠缺,而JDK的风格更易于理解和使用。
摘要由CSDN通过智能技术生成
嗯,看Bjarne的《The C++ Programming Language》的时候记的。刚刚又看到,整理到BLOG上吧。
 
对于Iterator实现的缺点,即虚函数的调用造成的开销,解决方法只有抹去虚函数,然而这样又如何做到多态?
 
对于“侵入式”容器(注:即容器内元素需要继承容器框架提供的特定接口/超类才能放入容器的设计,如Java中只有Object的子类才能进入 Java的容器里……貌似是废话,但对cpp就不是了)。BJ(注:Bjarne,cpp老豆)认为基于Object的容器实现很糟糕。然而对于Java 这种单根继承的OO语言来说,基于Object的容器并不算是“侵入”(语言是“侵入”式的?)。这种容器的缺点就是转型和不能直接放入基本类型的麻烦以 及由此带来的性能开销。在JDK5中,自动装箱和泛型语法已经消除了这些人工上的因素,性能上的缺陷则无法弥补。
关于BJ认为的容器的“胖界面”,其实并不成为问题,如果一切有一个完好的约定的话,意思是说,若某个方法返回一个抽象到Collection的容器,我们会事实上的对这个容器做功能上的最小假设,即关于顺序,操作时间等都不要做过多的要求;而假如返值是 List,则我们就会希望它的有序性,以此类推。这种用接口表达出来的容器实质上也在传递“概念”而非“类”的观念。这和STL的观念是类似的。尽管对于Collection的“肥大界面”,很多方法
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值