我爱Aspx >> VC.Net >> Effective STL Item 43:优先使用STL泛型算法以取代手写循环但这只是影响性能的次要因素。第一个主要影响因素是:库的实现者可以利用他们知道容器的具体实现的优势,用库的使用者无法采用的方式来优化代码。比如,在deque中的元素通常存储在(内部的)一个或多个固定大小的数组上。基于指针的遍历比基于选择子的遍历更快,但只有库的实现者可以使用基于指针的遍历,因为只有他们知道内部数组的大小以及如何从一个数组移向下一个。有一些STL容器和泛型算法的实现版本特别考虑了它们的deque的内部数据结构,而且已经知道,这样的实现比“通常”的实现快20%。
第二个主要因素是,除了最微不足道的算法,所有的STL泛型算法使用的数学算法都比一般的C++程序员能拿得出来的算法更复杂,--有时会复杂得多得多。不可能超越sort()及其同族泛型算法的(比如,stable_sort(),nth_element()等);适用于已序区间的搜索算法(比如,binary_search(),lower_bound() 等)相当完美;就算是很平凡的任务,比如从vector、deque或数组中销毁元素,使用erase-remove惯用法都比绝大多数程序员写的循环更高效。
如果效率的因素说服不了你,也许你更愿意接受基于正确性的考虑。写循环时,比较麻烦的事在于确保所使用的选择子(a)有效,并且(b)指向你所期望的地方。举例来说,假设有一个数组,你想获得其中的每一个元素,在上面加41,然后将结果从前端插入一个deque。用循环,你可能这样写:
// C API: this function takes a pointer
// to an array of at most arraySize
// doubles and writes data to it. It
// returns the number of doubles written.
Windows外壳名字空间的浏览[05-21]
Com Introduction[05-21]
VC程序调试技巧备忘录[05-21]
NO MFC - 使用 .log 调试程序[05-21]
VB的ShowInTaskbar功能分析以及用..[05-21]
自己动手丰衣足食-搞定网页乱码[05-21]
CUJ:普及知识:typeint[05-21]
关于VC代码的编写和调试(三)[05-21]
通过串口收发短消息(上)[05-21]
A LITE VIRUS ABOUT PE INFECT[05-21]