源码路径:STLport-5.2.1/stlport/stl
numeric:
- accumalate
- inner_product
- partial_sum
- adjacent_differnence: 相邻两个元素之间的差值or加法
- power:计算x的n次方
- iota:并非属于STL,只是一个扩展,是的某个指定区间,从指定值_val开始逐元素递增
其中,power算法可以简单讨论下:
- 方法1: 循环n次,x连乘,但这样比较低效, log(n)
- 方法2: 二分,递归,但栈溢出
- 方法3: 如STL实现,是对方法2的非递归写法;其中,n每次迭代后减半
algobase
- 交换元素:swap | swap_aux
- min | max: 针对2个元素
- copy | copy_trival | copy_backward | copy_n
- fill 用特定元素val填充某个指定区间 fill_fwd | fill_n
- equal | mismatch 确定l1和l2是否相等;或者不匹配的第一个点
- lexicographical_compare | lexicographical_compare 按字典序比较l1和l2
- 查找系列: find | find_if | find_first_of
- replace 原地替换更新元素值
algo:
- for_each 迭代遍历
- count_if
- adjacent_find 相邻两个相等元素的查找
- 查找系列:find_first_of search_n
- swap_ranges
- transform
- replace | replace_if | replace_copy | replace_copy_if
- generate | generate_n
- 删除系列: remove | remove_copy | remove_if | remove_copy_if 注意,执行后内存未释放,只是把未删除元素compact提前了,即last指针前移,末尾几个元素还是占用了空间,即vector.size不变
- unique | unique_copy
- reverse | rotate | reverse_copy
- random系列,数据shuffle用:random_sample | random_shuffle
- partition 这是为了快速排序做准备的func,即“划分排序”是用到划分嘛
- sort partial_sort 见下面
- merge | merge_sort 归并排序
set:
- set_union 取并集
- set_intersection 取交集
- set_difference 差集
- set_symmetric_difference A并B-A交B
排列组合:
- next_permutation 返回bool
- prev_permutation
heap:
- is_heap
other:
二分查找:
- lower_bound:第一个出现的位置,也即位置的下界
- upper_bound:最后出现的位置,也即位置的上界
- equal_range:基于lower_bound,返回查找的目标区间
- binary_search : 基于lower_bound,返回是否存在,bool|false
Sort:
- partial_sort 划分排序,就是快速排序; 怎么选pivot呢?采用median-of-three方法,即开头、中间、结尾三个元素,值大小处于中间的那个。
- insert_sort:元素较少时或者大部分有序时,效率较高;
- introspective_sort:1996,David R. Musser提出;可以自适应地从partial_sort切换到heap_sort;
Merge:归并排序
排列组合:
- next_permutation:直接在输入的vector原地生成新的排列组合;如果没有新的生成,返回false;
- pre_permutation