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() // 将每个元素和前面的所有元素组合. 

原文地址:https://www.cnblogs.com/roger9567/p/4890104.html