目录

算法

优质
小牛编辑
124浏览
2023-12-01

算法

我注意到从第一章开始,容器就占据了STL喝彩声中最大的一份。在某种意义上,这是可以理解的。容器有着非凡的造诣,它们使大批C++程序员每天的基本生活变得简单。尽管如此,STL算法的权利也很重要,一样有能力减轻程序员的负担。事实上,有超过100个算法,很容易证明比起容器,它们提供给程序员更精巧的工具集(起码一样强)。也许它们的数量是一部分问题。搞清八种截然不同的容器类型明显比记住70个算法的名字并且弄明白哪个做了什么要容易。

在本章,我有两个主要的目标。第一,我要通过向你演示一些比较少见的算法怎么使你的生活变得简单来向你介绍它们。放心,我不会用一堆需要记忆的名字来惩罚你。我在这一章演示算法是因为它们能解决常见问题,比如进行忽略大小写的字符串比较,在容器中高效地查找n个最想要的对象,统计区间中所有对象的特性,还实现了copy_if(一个来自最初的HP STL的算法,但在标准化过程中去掉了)的行为。

我的第二个目标是向你演示怎么避免算法的常见用法问题。例如,你不能调用remove或它的兄弟remove_if和unique,除非你真的知道这些算法做(和不做)什么。特别是当你删除的区间容纳的是指针时。同样,很多算法只和有序区间配合,所以你需要知道它们是什么和为什么它们会有这个限制。最后,最常见的算法相关错误之一是让一个算法把它的结果写向一个不存在的位置,所以我解释了这个谬论是怎么发生的和怎么确认你没有受此折磨。

本章的结束后,你可能不会把算法和容器放在同样的高度,但我希望你会比以前更关注它们。