C++如何使用std::inclusive_scan和std::exclusive_scan_C++算法操作与扫描函数应用


std::inclusive_scan 和 std::exclusive_scan 是 C++17 引入的前缀操作函数,定义于 头文件。1. inclusive_scan 计算包含当前元素的前缀累积,如 {1,2,3} 得到 {1,3,6};2. exclusive_scan 计算不包含当前元素的前缀累积,首项为初始值,如以 0 开始得 {0,1,3};两者支持自定义操作符,适用于前缀和、累积计数、并行算法等场景,提升代码简洁性与效率。

c++如何使用std::inclusive_scan和std::exclusive_scan_c++算法操作与扫描函数应用

在C++17中,std::inclusive_scanstd::exclusive_scan 被引入到标准库的 头文件中,用于执行前缀和(或更一般的前缀操作)。它们可以对一个范围内的元素进行累积操作,生成新的序列。这两个函数非常适用于并行计算、数组变换、前缀优化等问题。

包含头文件与基本定义

使用这两个函数前,需要包含头文件:

#include

此外,它们通常作用于容器如 std::vector、数组等支持迭代器的结构。

std::inclusive_scan 详解

inclusive_scan 计算的是“包含当前元素”的前缀操作。即第 i 个输出是前 i+1 个输入元素的累积结果。

函数原型:

std::inclusive_scan(first, last, result);
std::inclusive_scan(first, last, result, binary_op);

示例:计算前缀和

#include
#include iostream>
#include

int main() {
std::vector input = {1, 2, 3, 4, 5};
std::vector output(input.size());

std::inclusive_scan(input.begin(), input.end(), output.begin());

// 输出: 1 3 6 10 15
for (int x : output) std::cout std::cout }

你也可以传入自定义二元操作符,比如乘法:

std::inclusive_scan(input.begin(), input.end(), output.begin(), std::multiplies{});
// 结果: 1 2 6 24 120

std::exclusive_scan 详解

exclusive_scan 的特点是“不包含当前元素”,第 i 个输出是前 i 个元素的累积结果。第一个元素通常是初始值(可指定)。

无限画 无限画

千库网旗下AI绘画创作平台

无限画 574 查看详情 无限画

函数原型:

std::exclusive_scan(first, last, result, init);
std::exclusive_scan(first, last, result, init, binary_op);

示例:计算前缀和(排除自身)

std::vector input = {1, 2, 3, 4, 5};
std::vector output(input.size());

std::exclusive_scan(input.begin(), input.end(), output.begin(), 0);

// 输出: 0 1 3 6 10
for (int x : output) std::cout std::cout

使用自定义操作(例如最大值扫描):

std::exclusive_scan(input.begin(), input.end(), output.begin(), 0,
[](int a, int b) { return std::max(a, b); });
// 结果取决于逻辑,可用于滑动极值等场景

应用场景举例

这些扫描操作在实际编程中有多种用途:

  • 前缀和查询:快速实现区间求和,配合差分数组使用
  • 数据变换:如将频率数组转为累积分布
  • 并行算法模拟:scan 是并行计算中的基础操作,STL 实现可在多核上优化
  • 计数与索引映射:例如根据条件生成索引偏移

例如,统计每个位置之前有多少个偶数:

std::vector arr = {2, 3, 4, 5, 6};
std::vector is_even = {2%2==0, 3%2==0, 4%2==0, 5%2==0, 6%2==0}; // {1,0,1,0,1}
std::vector prefix_count(arr.size());

std::inclusive_scan(is_even.begin(), is_even.end(), prefix_count.begin());
// prefix_count 变为 {1,1,2,2,3},表示到当前位置共多少偶数

基本上就这些。合理使用 inclusive_scanexclusive_scan 能让代码更简洁、高效,避免手动写循环出错。

以上就是C++如何使用std::inclusive_scan和std::exclusive_scan_C++算法操作与扫描函数应用的详细内容,更多请关注其它相关文章!


# 扫描函数  # 温州小店推广员招聘网站  # 阿里组合营销推广方案有哪些  # 邮件营销推广行业有哪些  # seo女装商品的标题  # 企业微信推广营销文案  # 的是  # 不包含  # 第三方  # 多核  # 微软  # 这两个  # 适用于  # 如何使用  # 头文件  # 自定义  # 标准库  # stream  # ios  # c++  # ai  # c++算法  # 欧美篮球推广网站推荐  # 女装标题关键词排名  # 大连网站建设平台公司  # seo查询什么意思  # 赣州什么推广网站好用 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: 风车动漫官网首页入口登录 风车动漫在线观看正版地址  Final Cut Pro视频加EQ教程  51漫画网实时入口 51漫画网页版官方免费漫画入口  4399小游戏下装链接 4399小游戏下载链接入口  Windows 11怎么删除恢复分区_Windows 11使用Diskpart命令强行删除分区  TikTok私信无法发送表情怎么办 TikTok消息表情发送修复方法  微信客户端如何找回密码_微信客户端忘记密码找回方法  word表格如何按某一列内容进行排序_Word表格按列排序方法  Linux如何自动分析系统异常日志_Linux日志智能检测  12306APP选座怎么选充电位置_12306APP带充电插座座位选择方法与技巧  食品生产用水只要符合国家规定的生活饮用水卫生标准就可以吗  b站如何管理订阅_b站订阅标签分类管理  msn官方入口2025登录 msn官网2025直达首页入口  《原神》月之一版本新增书籍一览  在Peewee中处理PostgreSQL记录重复:一站式数据摄取教程  Python高效统计字典嵌套列表值在目标列表中的出现次数  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  米侠浏览器插件无法启用怎么办 米侠浏览器扩展兼容性修复  如何在CSS中使用伪类选择器_hover实现悬停效果  《雅迪智行》用手机开锁方法  《下一站江湖2》大雪山加入方法  夸克浏览器资源嗅探怎么用 夸克浏览器网页资源下载技巧【教程】  个人所得税办理入口 个人所得税综合所得年度汇算入口  韩小圈网页版PC端入口 韩小圈网页版官方网站入口  Animex动漫社正版在线入口 Animex动漫社动漫官方观看网  三星M34录音变声问题_Samsung M34麦克风调整  向日葵客户端怎么进行语音通话_向日葵客户端语音通话功能使用方法  基于键值条件高效映射 Pandas DataFrame 多列数据  Excel如何快速合并单元格内容_Excel文本合并与函数操作技巧  金牛福袋获取攻略  我的世界游戏平台入口 我的世界官方官网直达链接  Win10如何关闭开机锁屏界面_Windows10跳过锁屏直接登录设置  动漫之家观看全集库 动漫之家免费资源网地址  C#中的Record类型有什么优势?C# 9新特性Record与Class的用法区别  百度小说看书时如何翻页_百度小说手动翻页与自动翻页设置  CSS如何控制元素外边距_margin实现布局间隔  WPS文字如何进行简繁转换  汽水音乐车机版 汽水音乐车机版官方入口  我的世界官方网址入口 我的世界游戏主页直达入口  J*aScript实现网页表单实时输入字段比较与验证教程  阿里旺旺电脑网页版入口 阿里旺旺电脑版网页登录入口  繁花漫画使用教程  红手指专业版app注册教程  123网页端官方登录页 123邮箱网页版即时通讯服务  Win10显卡驱动安装失败怎么办 Win10使用DDU彻底卸载驱动【解决】  mysql如何管理数据库账户_mysql数据库账户管理技巧  德邦快递收费标准详解  J*a实现任务清单管理_集合框架综合入门练手  如何在vscode中关闭it环境  京东物流快递破损了怎么办_京东快递破损理赔流程 

 2025-11-17

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.