Programming 版 (精华区)
发信人: zhangyan (我让模电拼了……), 信区: Programming
标 题: Effective STL Item44
发信站: 哈工大紫丁香 (2001年06月07日09:59:24 星期四), 站内信件
原文(babysloth于2001/06/06 18:02粘贴)
关于Effective STL
------------------------------------------------------------------------
--------
看完了从aw那里下来的四个item以后的感觉似乎比看了EC/MEC的感觉差远了,不
知道是不是Meyers只放些比较平淡的例子给我们下载,还是因为我没看懂而乱下结
论?
本来鼓起勇气想翻译试试,就找了篇最短的item 44,Prefer member functions
to algorithms with the same names。哪知道翻译出来短得可怕,正如我初中英
语课文的翻译作业,根本不应该叫翻译,“信达雅”一样也没做到,最多算个摘要
,诸位随便看看得了。
当出现同名的成员函数和算法时,请选择前者。想想很简单,成员函数是为专门的
容器量身订做的,充分利用其特殊的性质,当然速度比通用的算法来得快,且不会
有些意想不到的麻烦。
首先成员函数功能更全。比如list的迭代子只不过是bidirectional iterator,根
本不能跟通用算法sort(快速排序算法需要random access iterator)配搭使用;
同样,list的merge要改变源表,而在通用算法merge里却是万万不可。在这种情况
下,那当然只能用其自身的成员函数。再比如map和multimap肯定是得用其成员函
数来操作关键值(key value),因为其内部是pair结构而不是value,通用算法里
压根儿就没有。当然如果您不嫌麻烦,也可以用通用算法操作pair,不过现成的便
宜不捡,也太……
然后是效率问题。比如set,内部结构一般是红黑树,同是find,通用算法是从头
到尾,时间是线性的;而成员函数所花时间则只不过是对数级,要快得多。再比如
list,通用算法remove等等,是操作list所保存的对象,还得分配空间、构造、析
构等等;而其成员函数只需要直接改动一下结点的指针即可,时间空间上都占便宜
。
还有一个问题就是通用算法需要通过传入的值来确定类型,那么诸如find,count这
些模板函数的前两个参数必须类型相同,否则编译出错,而采用成员函数则灵活得
多。
--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.170.172]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:1.986毫秒