STL算法---查找算法
1. adjacent_find (相邻查找)在范围[_First, _Last)查找第一对相邻相等的元素, 并返回这对元素的前面的iterator
2. binary_search (二分查找)
在有序序列中查找value,找到返回true。
3. count(统计)
4. count_if(统计)
在[_First, _Last)范围内的元素与输入值_Val比较, 返回相等元素个数
5. equal_range(也是使用二分查找的算法)
对已排序的[first, last)中寻找value的可插入位置, 它返回一对迭代器
6. find 和find_if元素查找
对范围[first, last)内的元素与输入值val进行比较. 当匹配时,结束搜索, 返回该元素的一个InputIterator
7. find_end(找到最后一组, 并返回)
在范围[first1, last1)内查找"[first2, last2)"的最后一次出现.找到则返回最后一对的第一个ForwardIterator,否则返回last1.
8. find_first_of(找到其中一个, 并返回)
在范围[first1, last1)内查找"[first2, last2)"中任意一个元素的第一次出现, 如果存在则返回. 重载版本中使用了用户自定义操作符
9. lower_bound和upper_bound(第一个大于等于;第一个大于)
lower_bound返回一个非递减序列[first, last)中第一个大于等于值val的位置。
upper_bound返回一个非递减序列[first, last)中第一个大于val的位置。
10. search
在[first1, last1)中, 查找成功指向第一个范围内第一次出现子序列(第二个范围)的位置,查找失败指向last1,
11. search_n(查找val出现n次的子序列)
在指定范围内查找val出现n次的子序列。
STL算法---堆算法
1. 实现堆栈有4个函数(make_heap, push_heap, pop_heap, sort_heap)
STL算法---关系算法(大于/小于/相等/包含)
1. equal(判断两序列是否相等)[first, last)与[x, x + last - first)每个对应位置的元素相等, 返回true.(默认使用等于操作符)
2. includes(判断两序列是否存在包含关系)
判断[first1, last1)内的所有元素是否都包含[first2, last2), 使用底层元素的<操作符, 成功返回true.
3. lexicographical_compare(以字典排列方式进行比较, 例如字符串的大小比较)
以字典排列方式进行比较
例如: "a" < "b"; "ab" < "b;" "1" < "2"; "11" < "2"; "A" < "AB" (字符的比较)
4. max / max_element / min / min_element(返回最大/最小元素)
4.1 max
返回两个元素中较大一个。
4.2 max_element
返回一个ForwardIterator,指出序列中最大的元素。
4.3 min
返回两个元素中较小一个。
4.4 min_element
返回一个ForwardIterator,指出序列中最小的元素。
5. mismatch (并行比较两个序列)
STL算法---集合算法
1. set_union(并集)2. set_intersection(交集)
3. set_difference(-交集)
4. set_symmetric_difference(并集-交集)
STL算法---排序算法
1. nth_element将范围内的序列重新排序, 使所有小于等于第n个元素的元素都出现在它前面,而大于它的都出现在后面。
2. partial_sort / partial_sort_copy (部分排序)
2.1 partial_sort
对序列做部分排序, 被排序元素个数正好可以被放到范围内.
2.2 partial_sort_copy
与partial_sort类似,不过将经过排序的序列复制到另一个容器
3. partition / stable_partition(分类排序)
3.1 partition
3.2 stable_partition
与partition类似, 但了保留容器中的相对顺序
4. random_shuffle(随机调整次序)
5. reverse / reverse_copy(反序排序)
6. sort / stable_sort
7. rotate / rotate_copy
把[first, middle)的元素拷贝到last的后面; 或者说把[middle, last)的元素拷贝到first的前面.
8. inplace_merge / merge
8.1 inplace_merge
合并两个有序序列,结果序列覆盖两端范围。
8.2 merge
合并两个有序序列,存放到另一个序列。重载版本使用自定义的比较
STL算法---拷贝/删除/替换算法
1. copy / copy_backward(复制序列)1.1 copy 复制序列
1.2 copy_backward 与copy相同,不过元素是从后面开始顺序拷贝填充
2. iter_swap
交换两个ForwardIterator的值, 就是两个值的交互.
3. remove / remove_copy / remove_if / remove_copy_if (删除操作)
3.1 remove
删除[first, last)内所有等于val的全部元素。例如在std::vector中元素被左移.
3.2 remove_copy
将所有不匹配元素复制到一个制定容器,返回OutputIterator指向被拷贝的末元素的下一个位置
3.3 remove_if
删除指定范围内输入操作结果为true的所有元素
3.4 remove_copy_if
将所有不匹配元素拷贝到一个指定容器
4. replace / replace_copy / replace_if / replace_copy_if (替换操作)
4.1 replace
将指定范围内所有等于vold的元素都用vnew代替
4.2 replace_copy
与replace类似,不过将结果写入另一个容器
4.3 replace_if
将指定范围内所有操作结果为true的元素用新值代替
4.4 replace_copy_if
与replace_if,不过将结果写入另一个容器
5. swap / swap_ranges
5.1 swap
交换存储在两个对象中的值
5.2 swap_ranges
将指定范围内的元素与另一个序列元素值进行交换
6. unique / unique_copy (清除序列中重复元素)
6.1 unique
清除序列中连续重复元素。例如: 11, 12, 12, 14 调用后变成 11, 12, 14.
6.2 unique_copy
与unique类似,不过把结果输出到另一个容器
STL算法---生成和变异算法(遍历元素, 对元素做一些事情)
1. fill / fill_n1.1 fill
将[first, last)中的元素赋值为x
1.2 fill_n
将输入值赋给first到first + n范围内的所有元素
2. for_each
用指定函数依次对指定范围内所有元素进行迭代访问,返回所指定的函数类型。该函数不得修改序列中的元素
3. generate / generate_n
3.1 generate
连续调用输入的函数来填充指定的范围
3.2 generate_n
与generate函数类似,填充从指定iterator开始的n个元素
4. transform
将输入的操作作用与指定范围内的每个元素,并产生一个新的序列。
STL算法---数学计算算法
1. accumulateiterator对标识的序列段元素之和,加到一个由val指定的初始值上。重载版本不再做加法,而是传进来的二元操作符被应用到元素上
2. partial_sum
创建一个新序列,其中每个元素值代表指定范围内该位置前所有元素之和。重载版本使用自定义操作代替加法
3. product
对两个序列做内积(对应元素相乘,再求和)并将内积加到一个输入的初始值上。重载版本使用用户定义的操作
4. adjacent_difference
创建一个新序列,新序列中每个新值代表当前元素与上一个元素的差。重载版本用指定二元操作计算相邻元素的差
5. 排列组合算法
5.1 next_permutation
取出当前范围内的排列,并重新排序为下一个排列。重载版本使用自定义的比较操作
5.2 prev_permutation
取出指定范围内的序列并将它重新排序为上一个序列。如果不存在上一个序列则返回false。重载版本使用自定义的比较操作