简介
algorithm头文件是C++的标准算法库,它主要应用在容器上。 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性。 因此,任何数据结构都能使用这套算法库,只要它具有相应的迭代器类型。
算法类别
#1c2860c35590c58038fc363c9a3c4ff4#
如上图所示,库中的算法主要分为4类:
-
非修改性顺序操作(Non-modifying sequence operations)
可变顺序操作(Mutating sequence operations)
排序和关系操作(Sorting and related operations)
C库算法(C library algorithms)
用过这个算法库的人都知道,里面的很多算法都是成对出现的,一个概念的算法经常有多个版本:
in-place version: 普通版本,直接操作对迭代器进行操作。 copying version: 拷贝版本,需要传入输出迭代器作为拷贝的destination。 该版本一般带有copy字样。 predicate version: 谓词版本,需要传入谓词作为判断的标准。 该版本一般带有if字样。Non-modifying sequence operations
all_of : 判断是否范围内的所有元素都满足条件。 any_of : 判断是否范围内的所有元素中有一个满足条件。 none_of : 判断是否范围内的所有元素中没有一个满足条件。 for_each : 对指定范围内的每一个元素进行指定的操作。 find、find_if、find_if_not : 在指定范围中查找满足某个条件(值相等、条件满足、条件不满足)的元素。 find_end : 在指定序列中查找最后一个相等(或满足谓词条件)子序列。 find_first_of : 在指定序列中查找第一个出现在另一个序列中(或满足谓词条件)的元素。 adjacent_find : 在指定序列中查找第一个相等(值相等、满足条件)的元素对(2个元素)。 count、count_if : 对制定序列中的满足条件(值相等、满足条件)的元素进行计数。 mismatch : 给定两个元素序列,返回第一个不匹配(值不相等、不满足条件)的元素位置,以一个迭代器对指出。 equal : 判断两个序列是否相等(值相等、满足谓词条件)。 is_permutation : 判断是否一个序列是另一个序列的排列,即只有排列方式不相等(值不相等、不满足谓词条件)。 search、search_n : 在给定序列中查找子序列或者n个重复的元素序列。Mutating sequence operations
copy、copy_n、copy_if、copy_backward : 拷贝序列、拷贝序列中前n个元素、拷贝序列中满足条件的、从后往前拷贝序列。 move、move_backward : 移动序列、从后往前移动序列(移动后,任然可以对源序列进行操作,但元素值是未指定的)。 swap、iter_swap : 逐元素交换序列、交换两个序列。 transform : 对一个 序列进行变换并输出、对两个序列进行变换并输出(变换通过自定义谓词来实现)。 replace、replace_if、replace_copy、replace_copy_if : 替换满足条件(值相等、满足谓词条件)的元素为给定元素、替换满足条件的元素并将其拷贝至别处。 fill、fill_n : 将给定序列元素填充为给定值、 将给定的前n个元素填充为给定值。 generate、generate_n : 用自定义的生成器生成元素,并将这些元素赋值给给定序列或前n个序列。 remove、remove_if : 移除相等或满足谓词条件的元素。 注意,若有元素被移除,指向这些元素之后的迭代器的可以使用,但结果是未指定的(unspecified)。 unique、unique_copy : 使序列唯一(即若有重复元素,保留第一个,其余全部移除)、是序列唯一并拷贝至目的地。 reverse、reverse_copy : 将给定序列逆转、将给定序列逆转并拷贝至目的地。 rotate、rotate_copy : 将给定序列左旋转(middle - first)个元素、将给定序列左旋转(middle - first)个元素并拷贝。 shuffle : 使用均匀随机数生成器将给定序列洗牌(即打乱,重新分布)。









