简介

algorithm头文件是C++的标准算法库,它主要应用在容器上。 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性。 因此,任何数据结构都能使用这套算法库,只要它具有相应的迭代器类型。
算法类别
如上图所示,库中的算法主要分为4类:
- 非修改性顺序操作(Non-modifying sequence operations)
- 可变顺序操作(Mutating sequence operations)
- 排序和关系操作(Sorting and related operations)
- C库算法(C library algorithms)
用过这个算法库的人都知道,里面的很多算法都是成对出现的,一个概念的算法经常有多个版本:
- in-place version: 普通版本,直接操作对迭代器进行操作。
- copying version: 拷贝版本,需要传入输出迭代器作为拷贝的destination。 该版本一般带有copy字样。
- predicate version: 谓词版本,需要传入谓词作为判断的标准。 该版本一般带有if字样。
Non-modifying sequence operations
- all_of : 判断是否范围内的所有元素都满足条件。
- any_of : 判断是否范围内的所有元素中有一个满足条件。
- none_of : 判断是否范围内的所有元素中没有一个满足条件。
- for_each : 对指定范围内的每一个元素进行指定的操作。
- find、find_if、find_if_not : 在指定范围中查找满足某个条件(值相等、条件满足、条件不满足)的元素。
- find_end : 在指定序列中查找最后一个相等(或满足谓词条件)子序列。
- find_first_of : 在指定序列中查找第一个出现在另一个序列中(或满足谓词条件)的元素。
- adjacent_find : 在指定序列中查找第一个相等(值相等、满足条件)的元素对(2个元素)。
- count、count_if : 对制定序列中的满足条件(值相等、满足条件)的元素进行计数。
- mismatch : 给定两个元素序列,返回第一个不匹配(值不相等、不满足条件)的元素位置,以一个迭代器对指出。
- equal : 判断两个序列是否相等(值相等、满足谓词条件)。
- is_permutation : 判断是否一个序列是另一个序列的排列,即只有排列方式不相等(值不相等、不满足谓词条件)。
- search、search_n : 在给定序列中查找子序列或者n个重复的元素序列。
Mutating sequence operations
- copy、copy_n、copy_if、copy_backward : 拷贝序列、拷贝序列中前n个元素、拷贝序列中满足条件的、从后往前拷贝序列。
- move、move_backward : 移动序列、从后往前移动序列(移动后,任然可以对源序列进行操作,但元素值是未指定的)。
- swap、iter_swap : 逐元素交换序列、交换两个序列。
- transform : 对一个 序列进行变换并输出、对两个序列进行变换并输出(变换通过自定义谓词来实现)。
- replace、replace_if、replace_copy、replace_copy_if : 替换满足条件(值相等、满足谓词条件)的元素为给定元素、替换满足条件的元素并将其拷贝至别处。
- fill、fill_n : 将给定序列元素填充为给定值、 将给定的前n个元素填充为给定值。
- generate、generate_n : 用自定义的生成器生成元素,并将这些元素赋值给给定序列或前n个序列。
- remove、remove_if : 移除相等或满足谓词条件的元素。 注意,若有元素被移除,指向这些元素之后的迭代器的可以使用,但结果是未指定的(unspecified)。
- unique、unique_copy : 使序列唯一(即若有重复元素,保留第一个,其余全部移除)、是序列唯一并拷贝至目的地。
- reverse、reverse_copy : 将给定序列逆转、将给定序列逆转并拷贝至目的地。
- rotate、rotate_copy : 将给定序列左旋转(middle - first)个元素、将给定序列左旋转(middle - first)个元素并拷贝。
- shuffle : 使用均匀随机数生成器将给定序列洗牌(即打乱,重新分布)。
下面几个函数有关分区的同一方面,但又功能却不想上面所列那么相似,故而分开叙述:
- is_partition : 用给定的一元谓词判断给定序列是否被正确分区(即前一部分元素调用谓词返回true,后一部分返回false)。
- partition : 对给定序列进行分区操作。
- stable_partition : 与partition操作相似,但是两个group(即分区成的两个分区)内元素的相关顺序保持不变(stable)。
- partition_copy : 与partition相似,但是两个分区group结果被拷贝到两个指定的位置。
- partition_point : 返回分区点,该点之前、该点之后(包括该点)分别为两个分区。
Sorting and related operations
这些函数都有两个版本:使用operator < 的、使用函数子Compare的。
- sort : 排序。
- stable_sort : 稳定排序。
- partial_sort : 部分排序,对于给定的序列,只排序前middle - first个元素,并将它们放置在[first, middle)范围中,剩余位置的元素顺序为指定。
- partial_sort_copy : paartial_sort函数的copy版本。
- is_sorted、is_sorted_util : 判断给定序列是否为已排序(使用operator < 或 自定义函数子判断)的。
- nth_element : 将nth迭代器指定的位置排序为结果元素。(实际上应该是使用快排实现的)
- lower_bound、upper_bound、equal_range : 返回下界、上界、相等性范围。
- binary_search : 在给定序列中对元素进行二分查找。
- merge、inplace_merge : 合并两个序列并输出。
- includes : 判断是否一个序列重的所有元素都被包含在另一个序列中。
- set_union : 并集。
- set_intersection : 交集。
- set_difference : 差集。
- set_symmetric_difference : 对称差集。
- push_heap : 将一个元素push进由序列表示的heap中,并维持堆得性质。
- pop_heap : 将一个元素从heap中pop(实际上被交换到尾部)。
- make_heap : 将给定序列构造成heap。
- sort_heap : 对给定堆进行排序(可能有特殊的算法对堆排序进行优化)。
- is_heap、is_heap_util : 判断给定序列是否为堆、判断给定序列到哪个位置之前为堆。
- min、max : 返回最小值、最大值。
- minmax : 返回pair
- min_element、max_element : 返回序列中第一个最小值、最大值。
- minmax_element : 返回pair
- lexicographical_compare : 对两个序列进行字典序排序。
- next_permutation、prev_permutation : 判断给定序列是否存在下一个或者上一个组合(所有可能的排列组合先由字典序排序,再进行判断)。
C library algorithms
该头文件还包含了标准C头文件stdlib.h,大体相同。 只是出于与C兼容的目的,bsearch 和 qsort同时包含了C和C++的两个函数签名。
# algorithm头文件
# c
# algorithm头文件下载
# C++头文件algorithm中的函数功能详解
# 详解C++中的万能头文件
# 关于VS2022不能使用<bits/stdc++.h>的解决方案(万能头文件)
# C++ Boost Algorithm算法超详细精讲
# C++实现分水岭算法(Watershed Algorithm)
# C++详细讲解常用math函数的用法
# C++常用字符串函数大全(2)
# 详解C++字符串常用操作函数(查找、插入、截取、删除等)
# c++中的string常用函数用法总结
# C++常用函数总结(algorithm 头文件)
# 第一个
# 迭代
# 判断是否
# 自定义
# 都是
# 移除
# 不满足
# 数据结构
# 并将
# 头文件
# 若有
# 不相等
# 为给
# 最小值
# 定值
# 几个
# 都有
# 随机数
# 包含了
# 多个
相关文章:
如何制作一个表白网站视频,关于勇敢表白的小标题?
如何在建站之星绑定自定义域名?
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
免费网站制作appp,免费制作app哪个平台好?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
深圳网站制作的公司有哪些,dido官方网站?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
深入理解Android中的xmlns:tools属性
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
如何通过VPS建站实现广告与增值服务盈利?
南京做网站制作公司,南京哈发网络有限公司,公司怎么样,做网页美工DIV+CSS待遇怎么样?
天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
股票网站制作软件,网上股票怎么开户?
香港服务器部署网站为何提示未备案?
广德云建站网站建设方案与建站流程优化指南
如何在阿里云香港服务器快速搭建网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何通过VPS搭建网站快速盈利?
建站中国官网:模板定制+SEO优化+建站流程一站式指南
如何选择CMS系统实现快速建站与SEO优化?
如何破解联通资金短缺导致的基站建设难题?
如何高效完成独享虚拟主机建站?
济南专业网站制作公司,济南信息工程学校怎么样?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
建站之家VIP精选网站模板与SEO优化教程整合指南
视频网站app制作软件,有什么好的视频聊天网站或者软件?
javascript中的try catch异常捕获机制用法分析
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
建站主机功能解析:服务器选择与快速搭建指南
如何在橙子建站中快速调整背景颜色?
,有什么在线背英语单词效率比较高的网站?
北京企业网站设计制作公司,北京铁路集团官方网站?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何通过西部建站助手安装IIS服务器?
建站之星云端配置指南:模板选择与SEO优化一键生成
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
怎么将XML数据可视化 D3.js加载XML
javascript基本数据类型及类型检测常用方法小结
网站制作外包价格怎么算,招聘网站上写的“外包”是什么意思?
专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?
如何通过多用户协作模板快速搭建高效企业网站?
如何快速配置高效服务器建站软件?
宝盒自助建站智能生成技巧:SEO优化与关键词设置指南
香港服务器如何优化才能显著提升网站加载速度?
如何正确下载安装西数主机建站助手?
如何在阿里云购买域名并搭建网站?