【C++】STL 算法汇总

简介: C++ 标准模板库 Standard Template Library 算法汇总

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 转化为前一个全排列

参考链接:


目录
相关文章
|
8天前
|
存储 缓存 C++
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
C++ 标准模板库(STL)提供了一组功能强大的容器类,用于存储和操作数据集合。不同的容器具有独特的特性和应用场景,因此选择合适的容器对于程序的性能和代码的可读性至关重要。对于刚接触 C++ 的开发者来说,了解这些容器的基础知识以及它们的特点是迈向高效编程的重要一步。本文将详细介绍 C++ 常用的容器,包括序列容器(`std::vector`、`std::array`、`std::list`、`std::deque`)、关联容器(`std::set`、`std::map`)和无序容器(`std::unordered_set`、`std::unordered_map`),全面解析它们的特点、用法
C++ 容器全面剖析:掌握 STL 的奥秘,从入门到高效编程
|
9天前
|
存储 监控 算法
员工屏幕监控系统之 C++ 图像差分算法
在现代企业管理中,员工屏幕监控系统至关重要。本文探讨了其中常用的图像差分算法,该算法通过比较相邻两帧图像的像素差异,检测屏幕内容变化,如应用程序切换等。文中提供了C++实现代码,并介绍了其在实时监控、异常行为检测和数据压缩等方面的应用,展示了其实现简单、效率高的特点。
37 15
|
9天前
|
算法 Serverless 数据处理
从集思录可转债数据探秘:Python与C++实现的移动平均算法应用
本文探讨了如何利用移动平均算法分析集思录提供的可转债数据,帮助投资者把握价格趋势。通过Python和C++两种编程语言实现简单移动平均(SMA),展示了数据处理的具体方法。Python代码借助`pandas`库轻松计算5日SMA,而C++代码则通过高效的数据处理展示了SMA的计算过程。集思录平台提供了详尽且及时的可转债数据,助力投资者结合算法与社区讨论,做出更明智的投资决策。掌握这些工具和技术,有助于在复杂多变的金融市场中挖掘更多价值。
38 12
|
1月前
|
C++ 容器
【c++丨STL】stack和queue的使用及模拟实现
本文介绍了STL中的两个重要容器适配器:栈(stack)和队列(queue)。容器适配器是在已有容器基础上添加新特性或功能的结构,如栈基于顺序表或链表限制操作实现。文章详细讲解了stack和queue的主要成员函数(empty、size、top/front/back、push/pop、swap),并提供了使用示例和模拟实现代码。通过这些内容,读者可以更好地理解这两种数据结构的工作原理及其实现方法。最后,作者鼓励读者点赞支持。 总结:本文深入浅出地讲解了STL中stack和queue的使用方法及其模拟实现,帮助读者掌握这两种容器适配器的特性和应用场景。
60 21
|
1月前
|
负载均衡 算法 安全
探秘:基于 C++ 的局域网电脑控制软件自适应指令分发算法
在现代企业信息化架构中,局域网电脑控制软件如同“指挥官”,通过自适应指令分发算法动态调整指令发送节奏与数据量,确保不同性能的终端设备高效运行。基于C++语言,利用套接字实现稳定连接和线程同步管理,结合实时状态反馈,优化指令分发策略,提升整体管控效率,保障网络稳定,助力数字化办公。
60 19
|
8天前
|
存储 算法 C++
深入浅出 C++ STL:解锁高效编程的秘密武器
C++ 标准模板库(STL)是现代 C++ 的核心部分之一,为开发者提供了丰富的预定义数据结构和算法,极大地提升了编程效率和代码的可读性。理解和掌握 STL 对于 C++ 开发者来说至关重要。以下是对 STL 的详细介绍,涵盖其基础知识、发展历史、核心组件、重要性和学习方法。
|
1月前
|
存储 算法 测试技术
【C++数据结构——树】二叉树的遍历算法(头歌教学实验平台习题) 【合集】
本任务旨在实现二叉树的遍历,包括先序、中序、后序和层次遍历。首先介绍了二叉树的基本概念与结构定义,并通过C++代码示例展示了如何定义二叉树节点及构建二叉树。接着详细讲解了四种遍历方法的递归实现逻辑,以及层次遍历中队列的应用。最后提供了测试用例和预期输出,确保代码正确性。通过这些内容,帮助读者理解并掌握二叉树遍历的核心思想与实现技巧。
54 2
|
2月前
|
存储 算法 安全
基于红黑树的局域网上网行为控制C++ 算法解析
在当今网络环境中,局域网上网行为控制对企业和学校至关重要。本文探讨了一种基于红黑树数据结构的高效算法,用于管理用户的上网行为,如IP地址、上网时长、访问网站类别和流量使用情况。通过红黑树的自平衡特性,确保了高效的查找、插入和删除操作。文中提供了C++代码示例,展示了如何实现该算法,并强调其在网络管理中的应用价值。
|
1月前
|
存储 算法 安全
基于哈希表的文件共享平台 C++ 算法实现与分析
在数字化时代,文件共享平台不可或缺。本文探讨哈希表在文件共享中的应用,包括原理、优势及C++实现。哈希表通过键值对快速访问文件元数据(如文件名、大小、位置等),查找时间复杂度为O(1),显著提升查找速度和用户体验。代码示例展示了文件上传和搜索功能,实际应用中需解决哈希冲突、动态扩容和线程安全等问题,以优化性能。
|
2月前
|
编译器 C语言 C++
【c++丨STL】list模拟实现(附源码)
本文介绍了如何模拟实现C++中的`list`容器。`list`底层采用双向带头循环链表结构,相较于`vector`和`string`更为复杂。文章首先回顾了`list`的基本结构和常用接口,然后详细讲解了节点、迭代器及容器的实现过程。 最终,通过这些步骤,我们成功模拟实现了`list`容器的功能。文章最后提供了完整的代码实现,并简要总结了实现过程中的关键点。 如果你对双向链表或`list`的底层实现感兴趣,建议先掌握相关基础知识后再阅读本文,以便更好地理解内容。
49 1