STL 算法汇总
I - 非修改序列的操作
算法名称 | 描述 |
---|---|
std::all_of | 测试范围内所有元素的是否满足条件 |
std::any_of | 测试范围内的任何元素是否满足条件 |
std::none_of | 测试是否没有元素满足条件 |
std::for_each | 在范围内应用函数 |
std::find | 在范围内查找值 |
std::find_if | 在范围内查找元素 |
std::find_if_not | 查找范围内不符合条件的元素 |
std::find_end | 查找范围内一个子序列最后出现的位置 |
std::find_first_of | 从范围内寻找符合条件的第一个元素 |
std::adjacent_find | 在范围内寻找相等的相邻元素 |
std::count | 计算范围内的值的出现次数 |
std::count_if | 返回范围内满足条件的元素的数量 |
std::mismatch | 返回两个范围中第一个不同的位置 |
std::equal | 测试两个范围内的元素是否相等 |
std::is_permutation | 检查一个序列是不是另一个序列的排列 |
std::search | 用于在一个序列中查找另一个序列第一次出现的位置,查找序列可包含多个不同元素 |
std::search_n | 搜索元素的范围,查找的只能是包含多个相同元素的子序列 |
II - 修改序列的操作
算法名称 | 描述 |
---|---|
std::copy | 复制范围内的元素 |
std::copy_n | 拷贝指定数量的元素 |
std::copy_if | 拷贝围内的符合条件的元素 |
std::copy_backward | 逆序复制元素的范围 |
std::move | 移动范围范围内的元素 |
std::move_backward | 向后移动元素的范围 |
std::swap | 交换两个元素的值 |
std ::swap_ranges | 交换两个范围的值 |
std::iter_swap | 交换两个迭代器所指向的元素的值 |
std ::transform | 应用给定的函数到范围并存储结果于指定的另一个范围内 |
std::replace | 替换范围内的值 |
std::replace_if | 替换范围内所有满足一元谓词的元素值为新值 |
std::replace_copy | 复制范围内的元素,目标元素替换为新元素 |
std::replace_copy_if | 复制范围内的元素,满足一元谓词的元素替换为新元素 |
std::fill | 用新值填充范围内的元素 |
std::fill_n | 用新值填充序列(n个元素) |
st::generate | 用函数的生成值最为范围内的元素值 |
std::generate_n | 用函数的生成值结果填充前n个元素 |
std::remove | 从范围中移动元素,使得返回值到范围尾的元素为需要删除的元素 |
std::remove_if | 从范围中删除元素符合条件的元素,使得返回值到范围尾的元素为需要删除的元素 |
std::remove_copy | 复制范围内的移除值 |
std::remove_copy_if | 复制范围内符合条件的移除值 |
std::unique | 移除范围内连续的重复值,返回值到元素尾的元素为需要删除的值 |
std::unique_copy | 拷贝范围移除重复值,不会破坏原先数组的顺序 |
std::reverse | 反转范围内的元素 |
std::reverse_copy | 反转范围内的元素,拷贝到新位置 |
std::rotate | 将两范围内的元素向左旋转 |
std::rotate_copy | 复制序列时向左旋转元素 |
std::random_shuffle | 随机地重新排列范围内的元素,使用默认随机数生成器 (废弃) |
std::shuffle | 使用指定随机数生成器重新排列范围内的元素 |
III - 分区操作
算法名称 | 描述 |
---|---|
std::is_partitioned | 测试范围是否被分区,即前部分需要全部符合一元谓词,后部分全不符合一元谓词 |
std::partition | 对指定区域内的数据进行分组 |
std::stable_partition | 将范围内元素分成两部分,不改变各组内元素的相对位置 |
std::partition_copy | 分组,且分组后不会改变各个元素的相对位置,但不对原序列做任何修改 |
std::partition_point | 获取分区点,即不满足 条件的第一个元素 |
IV - 排序
算法名称 | 描述 |
---|---|
std::sort | 对范围内的元素进行排序 |
std::stable_sort | 稳定排序,保证相等元素的相对位置 |
std::partial_sort | 对范围内的元素进行部分排序 |
std::partial_sort_copy | 拷贝和部分排序范围 |
std::is_sorted | 检查范围是否被排序 |
std::is_sorted_until | 找到范围内第一个未排序的元素 |
std::nth_element | 将第n个元素放到它的正确位置,对范围内的元素进行排序 |
V - 二分搜索(在分区/排序的范围内操作)
算法名称 | 描述 |
---|---|
std::lower_bound | 返回迭代器到下边界 |
std::upper_bound | 返回迭代器至上边界 |
std::equal_range | 获得范围内等于目标值的所有元素 |
std::binary_search | 二分法查找测试值是否存在于排序的序列中 |
VI - 合并(在排序的范围内操作)
算法名称 | 描述 |
---|---|
std::merge | 合并两个已排序的序列 |
std::inplace_merge | 合并在同一个数组或容器中的两个有序序列 |
std::includes | 测试已排序的范围是否包含另一个已排序的范围 |
std::set_union | 两个排序范围的合并 |
std::set_intersection | 两个排序范围的交集 |
std::set_difference | 两个排序范围的差集 |
std::set_symmetric_difference | 两个排序范围的对称性差集 |
VII - 堆操作
算法名称 | 描述 |
---|---|
std::push_heap | 对 heap 增加一个元素 |
std::pop_heap | 对 heap 取出下一个元素 |
std::make_heap | 将区间内元素转化为 heap |
std::sort_heap | 对堆的元素进行排序 |
std::is_heap | 测试范围是否是一个二叉堆。 |
std::is_heap_until | 返回有效二叉堆的最末范围 |
std::max | 返回最大的元素 |
std::minmax | 返回最小的和最大的元素组成的 pair, 第一个元素为最小值,第二个元素为最大值 |
std::min_element | 返回范围内最小的元素的地址或迭代器 |
std::max_element | 返回范围内的最大元素的地址或迭代器 |
std::minmax_element | 返回范围内最小和最大的元素迭代器位置组成的 pair |
VIII - 其他操作
算法名称 | 描述 |
---|---|
std::lexicographical_compare | 按照字典顺序的小于比较 |
std::next_permutation | 转换为下一个全排列 |
std::prev_permutation | 转化为前一个全排列 |
参考链接:
- http://c.biancheng.net/stl/
- https://blog.csdn.net/phd17621680432/article/details/122350359
- https://en.cppreference.com/w/cpp/algorithm/push_heap
- http://c.biancheng.net/view/7537.html
- https://blog.csdn.net/u014023993/article/details/47656525#:~:text=std%3A%3Aincludes%E7%94%A8%E4%BA%8E%E5%88%A4%E6%96%AD%E5%BA%8F%E5%88%97S2%E6%98%AF%E5%90%A6%E5%8C%85%E5%90%AB%E4%BA%8E%E5%BA%8F%E5%88%97S1%EF%BC%8C%E5%89%8D%E6%8F%90%E6%98%AF,%E5%BA%8F%E5%88%97S1%2CS2%E5%BF%85%E9%A1%BB%E4%B8%BA%E6%9C%89%E5%BA%8F%E5%BA%8F%E5%88%97%20%EF%BC%88%E8%8B%A5%E4%B8%BA%E6%97%A0%E5%BA%8F%E5%BA%8F%E5%88%97%EF%BC%8C%E9%A6%96%E5%85%88%E5%BA%94%E8%AF%A5%E9%80%9A%E8%BF%87std%3A%3Asort%E4%BD%BF%E5%85%B6%E5%8F%98%E4%B8%BA%E6%9C%89%E5%BA%8F%E5%BA%8F%E5%88%97%EF%BC%89%EF%BC%8C%E8%BF%94%E5%9B%9Efalse%EF%BC%88%E4%B8%8D%E5%8C%85%E5%90%AB%EF%BC%89%E6%88%96%E8%80%85true%EF%BC%88%E5%8C%85%E5%90%AB%EF%BC%89%E3%80%82
- https://blog.csdn.net/bandaoyu/article/details/109441444
- https://www.zhihu.com/people/cheng-xu-yuan-w/posts
- http://c.biancheng.net/view/7513.html
- https://runebook.dev/zh/docs/cpp/-index-#Algorithm
- https://www.jianshu.com/p/9613c764447f