按照习惯,我们可以认为 STL 是由容器、迭代器、算法及函数对象组成的,但要在程序中正确而有效地使用 STL 却并非这么简单。在利用 STL 进行编程的时候,你需要知道什么时候该使用循环,什么时候该使用算法,什么时候该使用容器的成员函数。你需要知道什么时候该使用 equal_range 来代替 lower_bound,什么时候该使用 lower_bound 来代替 find,而又在什么时候该使用 find 而不是 equal_range。你需要知道如何用函数子取代函数以便提高 STL 算法的性能。你需要知道如何避免不可移植的或者不易理解的代码。你甚至需要知道如何阅读编泽器的错误消息,即使是上千个字符长的错误消息也要能够分析。你还需要知道关于 STL 文档、STL 扩展及完整的 STL 实现的 Internet 资源。
是的,只有了解了这些,你才能够在程序中有效地使用 STL。本章将会涉及所有这些你必须了解的 STL 知识。
第43条:算法调用优先于手写的循环
提高了软件的抽象层次,从而使我们的软件更易于编写,更易于文档化,也更易于拓展和维护。
第44条:容器的成员函数优先于同名的算法
成员函数往往更快。
成员函数通常与容器结合的更紧密。
第45条:正确区分 count、find、binary_search、lower_bound、upper_bound 和 equal_range
选择能符合你的行为和性能要求的算法或者成员函数,同时当你调用所选择的算法或者成员函数的时候,所需要做的工作尽可能地最少。
第46条:考虑使用函数对象而不是函数作为 STL 算法的参数
以函数对象作为 STL 算法的参数,这种做法提供了包括效率在内的多种优势。
从代码被编译器接受的程度而言,它们更加稳定可靠。
第47条:避免产生 “直写型” 的代码
在软件工程领域中有这样一条真理:代码被阅读的次数远远大于它被编写的次数。
第48条:总是包含正确的头文件
C++ 标准与 C 的标准有所不同,它没有规定标准库中的头文件之间的相互包含关系。
第49条:学会分析与 STL 相关的编译器诊断信息
通过文本替换来降低错误消息复杂度,一旦你有了一些实践经验之后,只需在脑子里执行这种替换即可。
第50条:熟悉与 STL 相关的 Web 站点
SGI STL 站点:http://www.sgi.com/tech/stl/
STLport 站点: http://www.stlport.org
Boost 站点:http://www.boost.org