STL 算法
#include <algorithm> | #include <numeric> | #include <functional>
1. 判断式
- for 搜索算法: 传递一个函数或函数对象, 指定一个一元判断式可以作为搜索准则
- for 排序算法: 传递一个函数或函数对象, 指定一个二元判断式可以作为排序准则
- for 过滤: 传递一个一元判断式进行过滤
- for 数值运算: 为某个算法指定一个数值运算. 如: 可以让通常用来求和的 accumulate()算法改为求积.
- 判断式不应该在函数调用过程中改变参数的状态.
2. STL算法分类:
- 命名中的两个尾词
- _if: find(elem)/find_if(begin,end,functor/function), 前者直接查值, 后者按准则查找.
- _copy: reverse()/reverse_copy() , 前者将区间中的元素颠倒次序, 后者逆序复制到另一个区间.
- 非变动型算法
- 不改变元素的次序和值. 通过input迭代器和forward迭代器工作, 因此可以作用于所有标准容器上.
- for_each() // 对每个元素执行某操作
- count() // 返回元素个数
- count_if() // 返回满足某一准则的元素个数
- min/max_element() //返回最小/大元素的迭代器.
- find() //查找等于某值的第一个元素
- find_if() // 查找满足某准则的第一个元素
- search_n() // 查找具有某特性的第一段"n个连续元素"
- search() // 查找某子区间第一次出现的位置
- find_end() // 查询某自取件最后一次出现的位置.
- find_first_of() // 查找等于某几个值之一的第一个元素
- adjacent_find() //查找连续两个相等的或者满足某准则的元素.
- equal() // 判断两个区间是否相等.
- mismatch() //返回两个序列的各组对应元素中, 第一对不相等的元素.
- lexicographical_compare() // 判断某序列在"字典序"下是否小于另一序列.
- 由于string和STL是独立发展的, 在string中的查找算法和STL查找算法的名字不同. string中是: find()/rfind()/find_first_of()/find_last_of().
- 变动型算法
- copy() // 从第一个元素开始, 复制某段区间.
- copy_backward() // 从最后一个元素开始复制某段区间.
- transform() // 变动(并复制)元素, 将两个区间的元素合并.
- merge() //合并两个区间.
- swap_ranges() // 交换两区间内的元素
- fill() // 以给定的值替换每一个元素 fill_n() 替换 n 个
- generate()/generate_n() // 以某项操作结果替换每一项/n项元素.
- replace()/replace_all() //将具有特定值/符合某准则的元素替换为另一个.
- replace_copy() // 复制整个区间并将具有某特定值的元素替换为指定值
- replace_copy_if() // 复制整个区间, 将满足某准则的元素替换为指定值.
- reverse() / reverse_copy()
- rotate() / rotate_copy()
- next_permutation() / prev_permutation()
- random_shaffle()
- partation() // 改变元素次序, 使符合某准则的移到前面.
- stable_partation() // 与partation()相似, 但保持符合准则与不符合准则之间元素的相对位置.
- 移除型算法
- remove()/remove_if() // 移除指定值/满足准则的值 对应的元素.
- remove_copy() // 将不等于某值的元素复制到其他地方.
- remove_copy_if() //将不满足准则的元素复制到它处.
- unique() //移除相邻的重复元素
- unique_copy() // 移除相邻重复元素, 并复制到其他地方
- 排序算法
- sort()
- stable_sort() // 排序并保持相等元素之间的相对次序
- partial_sort() //排序, 知道前面n个元素就位.
- partial_sort_copy() // 排序, 直到前n个元素就位, 结果复制到其他地方.
- make_heap() // 将区间转化为一个heap
- push_heap() // 将元素加入一个heap
- pop_heap() // 从heap删除一个元素
- sort_heap() // 对heap进行排序, 指定后就不是heap了..
- 已序区间算法
- binary_serach()
- includes() //判断某区间内的每一个元素是否都在另一个区间内.
- lower_bound() / upper_bound() / equal_range()/merge()
- set_union() / set_intersection() / set_difference() //求两个区间的并/交/差集
- set_symmetric_difference() // 查找只出现在两区间之一的所有元素,形成一个已序区间
- inplace_merge() //将两个连续的已序区间合并.
- 数值算法
- accumulate() // 组合所有元素(求和 / 乘积)
- inner_product()
- adjacent_difference() // 将每个元素和前一个元素组合.
- partial_sum() // 将每个元素和前面的所有元素组合.