C++标准模板(STL)- 算法库

发布时间:2023年12月17日

算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。注意范围定义为 [first, last) ,其中 last 指代要查询或修改的最后元素的后一个元素。

有制约算法

C++20 在命名空间 std::ranges 中提供大多数算法的有制约版本,能以迭代器-哨位对或单个 range 参数指定范围,并且支持投影和指向成员指针可调用对象。另外更改了大多数算法的返回类型,以返回算法执行过程中计算的所有潜在有用信息。

std::vector<int> v = {7, 1, 4, 0, -1};
std::ranges::sort(v); // 有制约算法

头文件 <iterator> 提供为简化常用算法操作的制约而设计的概念和工具模板集合。

(C++20 起)

行策略

大多数算法拥有接受执行策略的重载。标准算法库提供几种执行策略,并提供对应执行策略的类型和对象。用户可以静态地选择执行策略,通过以对应类型的执行策略对象为参数,调用并行算法。

标准库实现(但不是用户)可以定义附加的执行策略作为扩展。以实现定义类型的执行策略对象调用的并行算法的语义是实现定义的。

定义于头文件 <execution>

定义于命名空间 std::execution

sequenced_policyparallel_policyparallel_unsequenced_policyunsequenced_policy

(C++17)(C++17)(C++17)(C++20)

执行策略类型
(类)

seqparpar_unsequnseq

(C++17)(C++17)(C++17)(C++20)

全局执行策略对象
(常量)

定义于命名空间 std

is_execution_policy

(C++17)

测试一个类是否表示某种执行策略
(类模板)
(C++17 起)

?

不修改序列的操作

定义于头文件 <algorithm>

all_ofany_ofnone_of

(C++11)(C++11)(C++11)

检查谓词是否对范围中所有、任一或无元素为 true
(函数模板)

for_each

应用函数到范围中的元素
(函数模板)

for_each_n

(C++17)

应用一个函数对象到序列的前 n 个元素
(函数模板)

countcount_if

返回满足指定判别标准的元素数
(函数模板)

mismatch

寻找两个范围出现不同的首个位置
(函数模板)

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)

按从后往前的顺序移动某一范围的元素到新的位置
(函数模板)

fill

将一个给定值复制赋值给一个范围内的每个元素
(函数模板)

fill_n

将一个给定值复制赋值给一个范围内的 N 个元素
(函数模板)

transform

将一个函数应用于某一范围的各个元素,并在目标范围存储结果
(函数模板)

generate

将相继的函数调用结果赋值给一个范围中的每个元素
(函数模板)

generate_n

将相继的函数调用结果赋值给一个范围中的 N 个元素
(函数模板)

removeremove_if

移除满足特定判别标准的元素
(函数模板)

remove_copyremove_copy_if

复制一个范围的元素,忽略满足特定判别标准的元素
(函数模板)

replacereplace_if

将所有满足特定判别标准的值替换为另一个值
(函数模板)

replace_copyreplace_copy_if

复制一个范围内的元素,并将满足特定判别标准的元素替换为另一个值
(函数模板)

swap

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

swap_ranges

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

iter_swap

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

reverse

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

reverse_copy

创建一个范围的逆向副本
(函数模板)

shift_leftshift_right

(C++20)

迁移范围中的元素
(函数模板)

rotate

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

rotate_copy

复制并旋转元素范围
(函数模板)

random_shuffleshuffle

(C++17 前)(C++11)

随机重排范围中的元素
(函数模板)

sample

(C++17)

从一个序列中随机选择 n 个元素
(函数模板)

unique

移除范围内的连续重复元素
(函数模板)

unique_copy

创建某范围的不含连续重复元素的副本
(函数模板)

划分操作

定义于头文件 <algorithm>

is_partitioned

(C++11)

判断范围是否已按给定的谓词划分
(函数模板)

partition

将范围中的元素分为两组
(函数模板)

partition_copy

(C++11)

复制一个范围,将各元素分为两组
(函数模板)

stable_partition

将元素分为两组,同时保留其相对顺序
(函数模板)

partition_point

(C++11)

定位已划分范围的划分点
(函数模板)

?排序操作

定义于头文件 <algorithm>

is_sorted

(C++11)

检查范围是否已按升序排列
(函数模板)

is_sorted_until

(C++11)

找出最大的已排序子范围
(函数模板)

sort

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

partial_sort

排序一个范围的前 N 个元素
(函数模板)

partial_sort_copy

对范围内的元素进行复制并部分排序
(函数模板)

stable_sort

将范围内的元素排序,同时保持相等的元素之间的顺序
(函数模板)

nth_element

将给定的范围部分排序,确保其按给定元素划分
(函数模板)


二分搜索操作(在已排序范围上)

定义于头文件 <algorithm>

lower_bound

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

upper_bound

返回指向第一个大于给定值的元素的迭代器
(函数模板)

binary_search

确定元素是否存在于某范围中
(函数模板)

equal_range

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

集合操作(在已排序范围上)

定义于头文件 <algorithm>

merge

归并两个已排序的范围
(函数模板)

inplace_merge

就地归并两个有序范围
(函数模板)

includes

若一个集合是另一个的子集则返回 true
(函数模板)

set_difference

计算两个集合的差集
(函数模板)

set_intersection

计算两个集合的交集
(函数模板)

set_symmetric_difference

计算两个集合的对称差
(函数模板)

set_union

计算两个集合的并集
(函数模板)

?堆操作

定义于头文件 <algorithm>

is_heap

检查给定范围是否为一个最大堆
(函数模板)

is_heap_until

(C++11)

查找能成为最大堆的最大子范围
(函数模板)

make_heap

从一个元素范围创建出一个最大堆
(函数模板)

push_heap

将一个元素加入到一个最大堆
(函数模板)

pop_heap

从最大堆中移除最大元素
(函数模板)

sort_heap

将一个最大堆变成一个按升序排序的元素范围
(函数模板)


最小/最大操作

定义于头文件 <algorithm>

max

返回各给定值中的较大者
(函数模板)

max_element

返回范围内的最大元素
(函数模板)

min

返回各给定值中的较小者
(函数模板)

min_element

返回范围内的最小元素
(函数模板)

minmax

(C++11)

返回两个元素的较小和较大者
(函数模板)

minmax_element

(C++11)

返回范围内的最小元素和最大元素
(函数模板)

clamp

(C++17)

在一对边界值间夹逼一个值
(函数模板)

比较操作

定义于头文件 <algorithm>

equal

确定两个元素集合是否是相同的
(函数模板)

lexicographical_compare

当一个范围按字典顺序小于另一个范围时,返回 true
(函数模板)

lexicographical_compare_three_way

(C++20)

用三路比较比较两个范围
(函数模板)

排列操作

定义于头文件 <algorithm>

is_permutation

(C++11)

判断一个序列是否为另一个序列的排列
(函数模板)

next_permutation

产生某个元素范围的按字典顺序的下一个较大的排列
(函数模板)

prev_permutation

产生某个元素范围的按字典顺序的下一个较小的排列
(函数模板)

数值运算

定义于头文件 <numeric>

iota

(C++11)

用从起始值开始连续递增的值填充一个范围
(函数模板)

accumulate

对一个范围内的元素求和
(函数模板)

inner_product

计算两个范围的元素的内积
(函数模板)

adjacent_difference

计算范围内各相邻元素之间的差
(函数模板)

partial_sum

计算范围内元素的部分和
(函数模板)

reduce

(C++17)

类似 std::accumulate,但不依序执行
(函数模板)

exclusive_scan

(C++17)

类似 std::partial_sum,第 i 个和中排除第 i 个输入
(函数模板)

inclusive_scan

(C++17)

类似 std::partial_sum,第 i 个和中包含第 i 个输入
(函数模板)

transform_reduce

(C++17)

应用一个函数对象,然后以乱序规约
(函数模板)

transform_exclusive_scan

(C++17)

应用一个函数对象,然后进行排除扫描
(函数模板)

transform_inclusive_scan

(C++17)

应用一个函数对象,然后进行包含扫描
(函数模板)


???????未初始化内存上的操作

定义于头文件 <memory>

uninitialized_copy

将范围内的对象复制到未初始化的内存区域
(函数模板)

uninitialized_copy_n

(C++11)

将指定数量的对象复制到未初始化的内存区域
(函数模板)

uninitialized_fill

复制一个对象到以范围定义的未初始化内存区域
(函数模板)

uninitialized_fill_n

复制一个对象到以起点和计数定义的未初始化内存区域
(函数模板)

uninitialized_move

(C++17)

移动一个范围的对象到未初始化的内存区域
(函数模板)

uninitialized_move_n

(C++17)

移动一定数量对象到未初始化内存区域
(函数模板)

uninitialized_default_construct

(C++17)

在范围所定义的未初始化的内存区域以默认初始化构造对象
(函数模板)

uninitialized_default_construct_n

(C++17)

在起始和计数所定义的未初始化内存区域用默认初始化构造对象
(函数模板)

uninitialized_value_construct

(C++17)

在范围所定义的未初始化内存中用值初始化构造对象
(函数模板)

uninitialized_value_construct_n

(C++17)

在起始和计数所定义的未初始化内存区域以值初始化构造对象
(函数模板)

destroy_at

(C++17)

销毁在给定地址的对象
(函数模板)

destroy

(C++17)

销毁一个范围中的对象
(函数模板)

destroy_n

(C++17)

销毁范围中一定数量的对象
(函数模板)

?C 库

定义于头文件 <cstdlib>

qsort

对未指定类型的元素的一个范围进行排序
(函数)

bsearch

在未指定类型的数组中搜索元素
(函数)
文章来源:https://blog.csdn.net/qq_40788199/article/details/134902726
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。