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

在C++17中,std::inclusive_scan 和 std::exclusive_scan 被引入到标准库的 <numeric> 头文件中,用于执行前缀和(或更一般的前缀操作)。它们可以对一个范围内的元素进行累积操作,生成新的序列。这两个函数非常适用于并行计算、数组变换、前缀优化等问题。
使用这两个函数前,需要包含头文件:
#include <numeric>此外,它们通常作用于容器如 std::vector、数组等支持迭代器的结构。
inclusive_scan 计算的是“包含当前元素”的前缀操作。即第 i 个输出是前 i+1 个输入元素的累积结果。
立即学习“C++免费学习笔记(深入)”;
函数原型:
std::inclusive_scan(first, last, result);示例:计算前缀和
#include <vector>你也可以传入自定义二元操作符,比如乘法:
std::inclusive_scan(input.begin(), input.end(), output.begin(), std::multiplies{});exclusive_scan 的特点是“不包含当前元素”,第 i 个输出是前 i 个元素的累积结果。第一个元素通常是初始值(可指定)。
函数原型:
std::exclusive_scan(first, last, result, init);示例:计算前缀和(排除自身)
std::vector<int> input = {1, 2, 3, 4, 5};使用自定义操作(例如最大值扫描):
std::exclusive_scan(input.begin(), input.end(), output.begin(), 0,这些扫描操作在实际编程中有多种用途:
例如,统计每个位置之前有多少个偶数:
std::vector<int> arr = {2, 3, 4, 5, 6};基本上就这些。合理使用 inclusive_scan 和 exclusive_scan 能让代码更简洁、高效,避免手动写循环出错。
以上就是C++如何使用std::inclusive_scan和std::exclusive_scan_C++算法操作与扫描函数应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号