Effective STL:5、算法
这在第 1 章开始的时候提到过,在 STL 中最受欢迎的就要数容器了。这点很容易理解 —— 容器无疑是 STL 最重要的成就之一,它极大地简化了众多 C++ 程序员的日常编程工作。同样地,STL 算法也有此殊荣,因为它同样能够显著地减轻程序员的负担。事实上,STL 中只有 8 个容器类,却包含超过 100 个算法,所以,毫无疑问,STL 算法为程序员提供了更为锐利的工具。但其庞大的数量同时也成为学习的障碍,记住 70 个算法的名字和功能比熟悉 8 个不同的容器类要困难得多。 本章有两个主要目标。第一,我将向你介绍 STL 中一些鲜为人知的算法,以及如何使用这些算法来简化工作。我不会只是简单地罗列这些算法的名字,凡是本章中我向你展示的算法,都可以解决一些非常常见的问题,比如:忽略大小写的字符串比较、有效地找到容器中最合适的 n 个对象、容器中一个区间内所有对象的统计处理,以及实现一个功能类似于 copy_if 的算法(最初的 HP STL 中实现了 copy_if,但在标准化过程中被删除了)。 我的第二个目标是告诉你应该如何避免在 STL 算法使用上的一些通病。比如,你必须非常清楚remove、remove_if 或者 unique 做了什么事情(以及没做什么事情),否则就不要调用这些算法。当要删除的区间中包含了指针的时候,这显得尤为重要。类似地,有许多算法要求排序的区间,所以