在线文档教程
C++
算法 | Algorithm

Algorithms library

算法库

算法库定义了用于对元素范围进行操作的各种目的(例如,搜索,排序,计数,操纵)的函数。请注意,一个范围被定义为[first, last)其中last是指元件过去检查或修改的最后一个元素。

执行策略大多数算法都有接受执行策略的重载。标准库算法支持三种执行策略:顺序,并行和并行+向量,库提供相应的执行策略类型和对象。用户可以通过调用具有相应类型的执行策略对象的并行算法静态地选择执行策略:std :: execution :: seq,std :: execution :: par或者std :: execution :: par_unseq。标准库实现(但不是用户)可以将附加执行策略定义为扩展。使用实现定义类型的执行策略对象调用的并行算法的语义是实现定义的。在头文件中定义在头文件中定义在命名空间执行中定义sequenced_policyparallel_policyparallel_unsequenced_policy(C ++ 17)(C ++ 17)(C ++ 17)执行策略类型(类)seqparpar_unseq(C ++ 17)(C ++ 17)(C ++ 17)全局执行策略对象(常量)is_execution_policy(C ++ 17)测试一个类是否代表执行策略(类模板)(自C ++ 17以来)

在标头中定义<execution>

在命名空间执行中定义

| sequenced_policyparallel_policyparallel_unsequenced_policy(C ++ 17)(C ++ 17)(C ++ 17)| 执行策略类型(class)|

| seqparpar_unseq(C ++ 17)(C ++ 17)(C ++ 17)| 全局执行策略对象(常量)|

| is_execution_policy(C ++ 17)| 测试一个类是否代表执行策略(类模板)|

非修改序列运算

*。

在标头中定义<algorithm>

| all_ofany_ofnone_of(C ++ 11)(C ++ 11)(C ++ 11)| 检查一个谓词是否对所有的元素(函数模板)|中的任何一个元素都是真的

| for_each | 将函数应用于一系列元素(函数模板)|

| for_each_n(C ++ 17)| 将函数对象应用于序列(函数模板)|的前n个元素

| countcount_if | 返回满足特定条件(函数模板)|的元素的数量

| 不匹配| 找到两个范围不同的第一个位置(函数模板)|

| equal| 确定两组元素是否相同(函数模板)|

| findfind_iffind_if_not(C ++ 11)| 找到满足特定条件(函数模板)|的第一个元素

| find_end | 找出一定范围(函数模板)|中的最后一个元素序列

| find_first_of | 搜索一组元素(函数模板)中的任何一个

| adjacent_find | 找到相等(或满足给定谓词)(函数模板)|的前两个相邻项目

| search | 搜索一系列元素(函数模板)|

| search_n | 在范围(函数模板)|中搜索一个元素的多个连续副本

| 修改序列操作|

在标头中定义<algorithm>

| copycopy_if(C ++ 11)| 将一系列元素复制到新位置(功能模板)|

| copy_n(C ++ 11)| 将许多元素复制到新位置(功能模板)|

| copy_backward | 以向后顺序复制一系列元素(功能模板)|

| move(C ++ 11)| 将一系列元素移动到新位置(函数模板)|

| move_backward(C ++ 11)| 将一系列元素以向后顺序移动到新位置(功能模板)|

| 填充| 将给定值复制指定给范围中的每个元素(函数模板)|

填充[医]n拷贝-在范围%28的函数模板%29中将给定的值分配给N个元素

| 变换| 将函数应用于一系列元素(函数模板)|

| 生成| 将连续函数调用的结果分配给范围中的每个元素(函数模板)|

| generate_n | 将连续函数调用的结果分配给范围(函数模板)|中的N个元素

| removeremove_if | 删除满足特定条件的元素(函数模板)|

| remove_copyremove_copy_if | 复制一系列元素,省略那些满足特定条件的元素(函数模板)|

| replacereplace_if | 用另一个值(函数模板)|替换满足特定条件的所有值

| replace_copyreplace_copy_if | 复制范围,用另一个值(函数模板)替换满足特定条件的元素

| 交换| 交换两个对象的值(函数模板)|

| swap_ranges | 交换两个元素范围(函数模板)|

| iter_swap | 交换两个迭代器指向的元素(函数模板)|

| 反转| 反转范围(函数模板)|中元素的顺序

| reverse_copy | 创建一个反转范围的副本(功能模板)|

| 旋转| 旋转范围(函数模板)|中元素的顺序

| rotate_copy | 复制和旋转一系列元素(功能模板)|

| random_shuffleshuffle(直到C ++ 17)(C ++ 11)| 随机重新排序范围内的元素(功能模板)|

| 样本(C ++ 17)| 从序列中选择n个随机元素(函数模板)|

| 独特的| 删除范围中的连续重复元素(函数模板)|

| unique_copy | 创建一些元素范围的副本,这些元素不包含连续的重复项(函数模板)|

在标头中定义<algorithm>

| 在头文件<algorithm> |中定义

| is_partitioned(C ++ 11)| 确定范围是否由给定谓词(函数模板)|分区

| 分区| 将一系列元素分为两组(函数模板)|

| partition_copy(C ++ 11)| 复制将元素分成两组的范围(功能模板)|

| stable_partition | 将元素分成两组,同时保留它们的相对顺序(函数模板)|

| partition_point(C ++ 11)| 找到分区范围的分区点(功能模板)|

| 分拣操作|

| 在头文件<algorithm> |中定义

| is_sorted(C ++ 11)| 检查范围是否按升序排序(功能模板)|

| is_sorted_until(C ++ 11)| 找到最大的排序子范围(函数模板)|

| 排序| 将范围排序为升序(函数模板)|

| partial_sort | 对范围的前N个元素(函数模板)进行排序

| partial_sort_copy | 复制和部分排序一系列元素(功能模板)|

| stable_sort | 对一系列元素进行排序,同时保持相等元素之间的顺序(函数模板)|

| nth_element | 部分对给定范围进行排序,确保它被给定元素(函数模板)|分区

| 二进制搜索操作(在已排序的范围内)|

| 在头文件<algorithm> |中定义

| lower_bound | 将迭代器返回给第一个不小于给定值的元素(函数模板)|

| upper_bound | 将迭代器返回到大于某个值(函数模板)|的第一个元素

| binary_search | 确定某个元素是否存在于某个范围内(函数模板)|

| equal_range | 返回与特定键(函数模板)匹配的元素范围

| 设置操作(在已排序的范围内)|

| 在头文件<algorithm> |中定义

| 合并| 合并两个排序范围(功能模板)|

| inplace_merge | 合并两个有序范围(函数模板)|

| 包括| 如果一个集合是另一个集合(函数模板)|,则返回true

| set_difference | 计算两组之间的差异(函数模板)|

| set_intersection | 计算两组的交集(函数模板)|

| set_symmetric_difference | 计算两组之间的对称差异(函数模板)|

| set_union | 计算两个集合的联合(函数模板)|

| 堆操作|

| 在头文件<algorithm> |中定义

| is_heap(C ++ 11)| 检查给定范围是否为最大堆(函数模板)|

| is_heap_until(C ++ 11)| 找到最大的子堆(最大堆)(函数模板)|

| make_heap | 从一系列元素(函数模板)|中创建最大堆

| push_heap | 向最大堆添加元素(函数模板)|

| pop_heap | 从最大堆(函数模板)|中删除最大元素

| sort_heap | 将最大堆转换为按升序排序的元素范围(函数模板)|

| 最小/最大操作|

| 在头文件<algorithm> |中定义

| 最大| 返回给定值中的较大值(函数模板)|

| max_element | 返回范围中最大的元素(函数模板)|

| min | 返回给定值中较小的一个(函数模板)|

| min_element | 返回范围中的最小元素(函数模板)|

| minmax(C ++ 11)| 返回两个元素中较小和较大的元素(函数模板)|

| minmax_element(C ++ 11)| 返回范围中最小和最大的元素(函数模板)|

| clamp(C ++ 17)| 钳位一对边界值之间的值(功能模板)|

| lexicographical_compare | 如果一个范围按字典顺序小于另一个范围(函数模板)|,则返回true

| is_permutation(C ++ 11)| 确定序列是否是另一个序列(函数模板)|的排列

普雷夫[医]置换将生成一系列元素的下一个较小的字典排列(%28功能模板%29)。

数值运算

在标头中定义<numeric>

iota%28C++11%29用起始值%28函数模板%29的连续增量填充范围

累加一个元素的范围%28函数模板%29

内层[医]乘积计算两个元素范围%28功能模板%29的内积

相邻[医]差值计算范围%28函数模板%29中相邻元素之间的差异

部分[医]和计算元素范围%28函数模板%29的部分和。

减少%28C++17%29,类似于std::累计,除无序%28功能模板%29外

排他性[医]扫描%28C++17%29类似于性病::部分[医]和,从ith sum%28函数模板%29中排除ith输入元素。

包涵[医]扫描%28C++17%29类似于性病::部分[医]和,包括ith sum%28函数模板%29中的ith输入元素。

变换[医]减少%28C++17%29应用函子,然后减少无序%28功能模板%29

变换[医]排他性[医]扫描%28C++17%29应用函子,然后计算排他性扫描%28功能模板%29

变换[医]包涵[医]扫描%28C++17%29应用函子,然后计算包含扫描%28功能模板%29

未初始化内存的操作

在标头中定义<memory>

*。

未初始化[医]将一系列对象复制到未初始化的内存区域%28函数模板%29

未初始化[医]复制[医]n%28C++11%29将多个对象复制到未初始化的内存区域%28函数模板%29

未初始化[医]填充将对象复制到未初始化的内存区域,该区域由范围%28函数模板%29定义

未初始化[医]填充[医]n将对象复制到未初始化的内存区域,该区域由开始和计数%28函数模板%29定义。

未初始化[医]移动%28C++17%29将一系列对象移动到未初始化的内存区域%28函数模板%29

未初始化[医]移动[医]n%28C++17%29将多个对象移动到未初始化的内存区域%28函数模板%29

未初始化[医]违约[医]构造%28C++17%29默认情况下在未初始化的内存区域中构造对象,该区域由范围%28函数模板%29定义

未初始化[医]违约[医]构造[医]默认情况下,n%28C++17%29在未初始化的内存区域中构造对象,由启动和计数%28函数模板%29定义。

未初始化[医]价值[医]构造%28C++17%29在未初始化的内存区域中通过值初始化构造对象,该区域由范围%28函数模板%29定义

未初始化[医]价值[医]构造[医]n%28C++17%29通过值初始化在未初始化的内存区域中构造对象,该区域由启动和计数%28函数模板%29定义

毁灭[医]在%28C++17%29中销毁给定地址的对象%28函数模板%29

销毁%28C++17%29销毁一系列对象%28功能模板%29

毁灭[医]n%28C++17%29销毁范围%28功能模板%29中的多个对象

C库

在标头中定义<cstdlib>

QSort对未指定类型%28函数%29的元素范围进行排序

BSearch在数组中搜索未指定类型%28函数%29的元素

另见

C算法文档

*。

© cppreference.com

在CreativeCommonsAttribution下授权-ShareAlike未移植许可v3.0。

http://en.cppreference.com/w/cpp/Algorithm