新闻中心

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

2025-11-17
浏览次数:
返回列表
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 个元素的累积结果。第一个元素通常是初始值(可指定)。

Whimsical Whimsical

Whimsical推出的AI思维导图工具

Whimsical 182 查看详情 Whimsical

函数原型:

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++算法操作与扫描函数应用的详细内容,更多请关注其它相关文章!


# 扫描函数  # 解决方法  # 迭代  # 多核  # 数据结构  # 这两个  # 适用于  # 如何使用  # 自定义  # 标准库  # stream  # ios  # c++  # ai  # c++算法  # 头文件  # 大理抖音营销推广公司  # 营销计划推广链接  # 淘宝店铺营销推广策划  # 注塑行业如何推广营销  # 龙华网站建设怎么做好  # 电商网站建设周期  # 西宁seo公司选择12火星  # 阳新seo优化费用  # SEO营销知乎  # 抖音seo引擎厂家推广  # 如何实现 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: 企业名称高精度匹配:N-gram方法在结构相似性分析中的应用  解决Bootstrap卡片顶部边距导致背景图下移的问题  PDO预处理语句中冒号的正确处理:区分SQL函数格式与命名占位符  机器学习中对数变换预测结果的反向还原  Python模块化编程:有效管理依赖与避免循环引用  Win11怎么查看显卡显存 Win11显示适配器属性及专用视频内存查询  微信语音通话掉线如何解决 微信语音通话稳定优化方法  Go语言中JSON数据解析与字段访问教程  Lar*el头像管理:图片缩放与旧文件删除的最佳实践  Composer如何在生产环境安全地执行composer update  痛风发作了怎么办? 快速止痛和后期饮食调理  顺丰国际快递查询 国际件官方查询入口  PHP中高效并行检查多链接状态的教程  “音游” × “怪文书” 题材的节奏冒险游戏 《晕晕电波症候群》确定于2026年4月发售!  c++项目目录结构应该如何组织_c++工程化项目结构规范  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  解决移动端滚动问题的overflow属性应用指南  Excel组合图表怎么做 Excel创建柱状图与折线组合图教程【图表】  Adobe PDF表单中利用J*aScript解析与格式化日期组件的教程  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  创客贴用户入口官网登录 创客贴网页版电脑版系统  J*aScript中管理异步API调用:确保操作顺序与数据一致性  快手赚钱渠道_快手收益来源  解决J*aScript中重复选择项的确认对话框显示问题  Win11如何使用Windows Sandbox Win11沙盒功能开启与使用教程【详解】  小米14应用无法联网原因分析_小米14网络权限修复  微信客户端如何收红包_微信客户端接收红包使用教程  mysql密码锁定怎么解锁_mysql密码锁定解锁后修改密码步骤  我的世界官方游戏入口 我的世界官网平台直达链接  ACG动漫手机版官网入口 手机ACG动漫APP在线观看正版  Typer应用中灵活处理命令行参数的令牌化与解析  俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口  c++如何使用TBB库进行任务并行_c++ Intel线程构建模块  高德地图沿途添加点失败如何解决 高德多点规划方法  Golang如何处理RPC请求负载均衡_Golang RPC请求负载均衡策略与实践  海棠账号登录入口_登录海棠账户同步阅读记录  漫蛙官网正版漫画入口 漫蛙2官方网页登录地址  地铁跑酷免费秒玩入口链接 地铁跑酷小游戏免费秒玩网站  composer 和 npm/yarn 在管理依赖方面有什么核心思想差异?  html5 app怎么运行环境_配html5 app运行环境【教程】  实现分段式页面滚动导航:CSS与J*aScript教程  邮编格式怎么匹配地址_根据邮编格式快速匹配详细地址的技巧  优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题  j*a toString()的覆盖  J*a如何使用AtomicInteger控制计数_J*a无锁计数器性能分析  响应式容器内容自动缩放与宽高比维持教程  J*aScript中赋值与自增运算符的复杂交互与执行机制  Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性  必由学官网首页入口 必由学教师网页版登录指南  MAC怎么在地图App里使用“四处看看”_MAC体验部分城市的3D实景街景 

搜索