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

算法库提供大量用途的函数(例如查找、排序、计数、操作),它们在元素范围上操作。注意范围定义为 [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

在未指定类型的数组中搜索元素
(函数)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/227749.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

laravel5.5 里面如果想要使用自定义的数据库连接器

由于项目里面使用到了doris&#xff0c;虽然doris支持mysql协议&#xff0c;但是如果直接把他当mysql使用是行不通的&#xff0c;因为doris并不支持mysql的一些option和mode设置&#xff0c;然后就会一直报错&#xff1a; SQLSTATE[HY000]: General error: 2013 Lost connecti…

前端常用去重的几种方式

文章目录 方式1: ES6新语法方式2: 遍历 利用filter方式3: 使用 new Map() for循环方式4: 利用 hasOwnProperty总结 在github 查看该文章 方式1: ES6新语法 过滤出网页中不重复的html标签 结合去重知识点考查 […new Set([…document.querySelectorAll(‘*’)].map(v>v.t…

分布式锁,进程锁,线程锁

线程锁:大家都不陌生&#xff0c;主要用来给方法、代码块加锁。当某个方法或者代码块使用锁时&#xff0c;那么在同一时刻至多仅有有一个线程在执行该段代码。当有多个线程访问同一对象的加锁方法/代码块时&#xff0c;同一时间只有一个线程在执行&#xff0c;其余线程必须要等…

Vue使用Canvas实现电子签名功能示例

当使用Vue来实现电子签名功能时&#xff0c;可以结合Canvas元素和Vue的数据绑定功能来实现。下面是一个简单的示例&#xff0c;演示了如何在Vue中使用Canvas实现电子签名功能&#xff1a; <template><div><!-- Canvas元素用于绘制电子签名 --><canvasref…

bigdecimal比较大小

bigdecimal比较大小 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在日常的Java开发中&#xff0c;我们经常会涉及到对数字进行比较&#xff0c;而BigDecimal作为一种高精度的数值类型&#xff0c;其…

06 使用v-model实现双向数据绑定

概述 Vue achieves two-way data binding by creating a dedicated directive that watches a data property within your Vue component. The v-model directive triggers data updates when the target data property is modified on the UI. Vue 通过创建一个专用指令来观…

IntelliJ IDEA 自带HTTP Client接口插件上传文件示例

如何使用IntelliJ IDEA自带的HTTP Client接口插件进行文件上传的示例。在这个示例中&#xff0c;我们将关注Controller代码、HTTP请求文件&#xff08;xxx.http&#xff09;&#xff0c;以及文件的上传和处理。 Controller代码 首先&#xff0c;让我们看一下处理文件上传的Co…

第15章 《乐趣》Page305~311, 代码精简以后,讨论一下引用含义的问题

将Page305~311的代码精简了一下&#xff0c;讨论一下引用含义的问题&#xff0c;精简之后的代码如下&#xff1a; #include <iostream> #include <SDL2/SDL.h>using namespace std;namespace sdl2 {char const* last_error() {return SDL_GetError(); }struct Ini…

基于 WebSocket 打造聊天室

一、什么是 WebSocket&#xff1f; WebSocket 是一种基于TCP连接上进行 全双工 通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单&#xff0c;允许服务端主动向客户端推送数据。在WebSocket API中&#xff0c;浏览器和服务器只需要完成一次握手&#xff0c…

第三十六章 XML 模式的高级选项 - 创建子类型的替换组

文章目录 第三十六章 XML 模式的高级选项 - 创建子类型的替换组创建子类型的替换组将子类限制在替换组中 第三十六章 XML 模式的高级选项 - 创建子类型的替换组 创建子类型的替换组 XML 模式规范还允许定义替换组&#xff0c;这可以是创建选择的替代方法。语法有些不同。无需…

Windows 10如何关闭系统自动更新(实用教程)

本章教程&#xff0c;用最简洁的方式介绍在windows10中如何关闭系统自动更新。 目录 一、关闭自动更新服务 二、关闭自动更新组策略 一、关闭自动更新服务 1、 winr 2、services.msc 3、找到并双击 Windows Update 修改启动类型为禁用 二、关闭自动更新组策略 1、winr 2、gp…

2.4【渲染】Vulkan渲染APIs

写在前面 Screen支持Khronos的Vulkan渲染API。Vulkan是一款用于3D图形和计算的低开销、跨平台、开放行业标准API。它使开发人员能够使用相同的图形API来面向各种设备。 Vulkan标准由Khronos Group发布。 通常,硬件供应商都有自己的Khronos标准实现,利用硬件加速,特别是GP…

Next.js 学习笔记(一)——安装

安装 系统要求&#xff1a; Node.js 18.17 或更高版本支持 macOS、Windows&#xff08;包括 WSL&#xff09;和 Linux 自动安装 我们建议使用 create-next-app 启动一个新的 Next.js 应用程序&#xff0c;该应用程序会自动为你设置所有内容。要创建项目&#xff0c;请运行&…

3. 内容模块管理 - 异常处理与校验

文章目录 内容模块管理一、自定义异常1.1 全局异常处理器1.2 自定义异常1.3 异常统一响应类1.4 封装通用异常信息 二、JSR303校验2.1 Maven坐标2.2 校验规则2.3 代码示例2.4 捕捉校验异常2.5 分组校验2.6 备注 三、全局异常处理23.1 全局异常处理器3.2 结果集3.3 常用注解3.3.1…

【漏洞复现】捷诚管理信息系统 SQL注入漏洞

漏洞描述 捷诚管理信息系统是一款功能全面,可以支持自营、联营到外柜租赁的管理,其自身带工作流管理工具,能够帮助企业有效的开展内部审批工作。 该系统CWSFinanceCommon.asmx接口存在SQL注入漏洞。未经身份认证的攻击者可以通过该漏洞获取数据库敏感信息,深入利用可获取…

Redis设计与实现之整数集合

目录 一、内存映射数据结构 二、整数集合 1、整数集合的应用 2、数据结构和主要操作 3、intset运行实例 创建新intset 添加新元素到 intset 添加新元素到 intset&#xff08;不需要升级&#xff09; 添加新元素到 intset (需要升级) 4、升级 升级实例 5、关于升级 …

GZ015 机器人系统集成应用技术样题4-学生赛

2023年全国职业院校技能大赛 高职组“机器人系统集成应用技术”赛项 竞赛任务书&#xff08;学生赛&#xff09; 样题4 选手须知&#xff1a; 本任务书共 25页&#xff0c;如出现任务书缺页、字迹不清等问题&#xff0c;请及时向裁判示意&#xff0c;并进行任务书的更换。参赛队…

Flutter在Android Studio上创建项目与构建模式

一、安装插件 1、前提条件&#xff0c;安装配置好Android Studio环境 2、安装Flutter和Dart插件 Linux或者Windows平台&#xff1a; 1&#xff09;、打开File > Settings。 2&#xff09;、在左侧列表中&#xff0c;选择"Plugins"右侧上方面板选中 "Market…

vue-element-admin如何把mock换成使用真实后台接口

1&#xff09;修改vue.config.js文件 use strict const path require(path) const defaultSettings require(./src/settings.js)function resolve(dir) {return path.join(__dirname, dir) }const name defaultSettings.title || vue Element Admin // page title// If you…

Vue3-16-【v-model】 表单数据绑定

作用描述 v-model 指令&#xff0c;实现了 表单输入组件的值 与 js 中的变量的值的绑定关系。 当我们在页面上执行输入动作时&#xff0c;js中变量的值也会同步发生变化。表单不仅仅局限于输入框&#xff0c;其他的如 &#xff1a; 单选按钮&#xff0c;复选框&#xff0c;下拉…