常用标准库之-std::reduce与std::execution::par

news/2025/2/24 14:26:59

1. std::reduce

定义与头文件

std::reduce 是 C++ 17 引入的并行算法,定义在 <numeric> 头文件中,用于对指定范围内的元素进行归约操作(如求和、求积等)。

函数原型
template< class ExecutionPolicy, class ForwardIt >
typename std::iterator_traits<ForwardIt>::value_type
reduce( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last );

template< class ExecutionPolicy, class ForwardIt, class T >
T reduce( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, T init );
  • ExecutionPolicy:执行策略类型,用于指定算法的执行方式(如串行、并行等)。
  • ForwardIt:前向迭代器类型,指定元素范围。
  • T:初始值的类型。
  • policy:执行策略对象。
  • first:指向范围起始位置的迭代器。
  • last:指向范围结束位置的迭代器。
  • init:可选的初始值。
功能
  • 第一个重载形式没有初始值,它会对 [first, last) 范围内的元素进行归约操作。对于数值类型,默认的归约操作是求和。
  • 第二个重载形式接受一个初始值 init,归约操作会从 init 开始,将范围内的元素依次与当前结果进行合并。
示例代码
#include <iostream>
#include <vector>
#include <numeric>

int main() {
    std::vector<int> vec = {1, 2, 3, 4, 5};
    int sum = std::reduce(vec.begin(), vec.end()); // 对vec中的元素进行求和操作
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}

2. std::execution::par

定义与头文件

std::execution::par 是 C++ 17 引入的执行策略对象,定义在 <execution> 头文件中,用于指定算法以并行方式执行。

功能

std::execution::par 告诉支持执行策略的算法(如 std::reduce)使用并行执行模式。在多核处理器系统中,算法会将任务分解为多个子任务,并在多个线程上同时执行,以提高计算效率。

示例代码
#include <iostream>
#include <vector>
#include <numeric>
#include <execution>

int main() {
    std::vector<int> vec(1000000);
    std::iota(vec.begin(), vec.end(), 1);
    int sum = std::reduce(std::execution::par, vec.begin(), vec.end());
    /*std::reduce 使用 std::execution::par 执行策略,会并行地对 vec 中的元素进行求和操作,
    充分利用多核处理器的性能。需要注意的是,并行执行可能会带来一些额外的开销(如线程创建和同步),
    因此对于小规模数据,并行执行可能并不比串行执行快。*/
    std::cout << "Sum: " << sum << std::endl;
    return 0;
}

http://www.niftyadmin.cn/n/5864462.html

相关文章

跟着李沐老师学习深度学习(十四)

注意力机制&#xff08;Attention&#xff09; 引入 心理学角度 动物需要在复杂环境下有效关注值得注意的点心理学框架&#xff1a;人类根据随意线索和不随意线索选择注意力 注意力机制 之前所涉及到的卷积、全连接、池化层都只考虑不随意线索而注意力机制则显示的考虑随意…

一、初始爬虫

1.爬虫的相关概念 1.1 什么是爬虫 网络爬虫&#xff08;又被称为网页蜘蛛&#xff0c;网络机器人&#xff09;就是模拟浏览器发送网络请求&#xff0c;接收请求响应&#xff0c;一种按照一定的规则&#xff0c;自动地爬取互联网信息的程序。 原则上&#xff0c;只要是浏览器…

《苍穹外卖》电商实战项目(java)知识点整理(P1~P65)【上】

史上最完整的《苍穹外卖》项目实操笔记&#xff0c;跟视频的每一P对应&#xff0c;全系列10万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 《苍穹外卖》项目实操笔记【中】&#xff1a;P66~P…

Django check_password原理

check_password 是 Django 提供的一个用于密码校验的函数&#xff0c;它的工作原理是基于密码哈希算法的特性。 Django 的 make_password 函数在生成密码哈希时&#xff0c;会使用一个随机的 salt&#xff08;盐值&#xff09;。这个 salt 会与密码一起进行哈希运算&#xff0…

游戏引擎学习第119天

仓库:https://gitee.com/mrxiao_com/2d_game_3 上一集回顾和今天的议程 如果你们还记得昨天的进展&#xff0c;我们刚刚完成了优化工作&#xff0c;目标是让某个程序能够尽可能快速地运行。我觉得现在可以说它已经快速运行了。虽然可能还没有达到最快的速度&#xff0c;但我们…

六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战

欢迎来到编程星辰海的博客讲解 目录 一、语义化标签的核心价值 1.1 什么是语义化&#xff1f; 1.2 核心优势 二、语义标签详解与使用场景 2.1 布局容器标签 2.2 内容组织标签 三、博客结构搭建实战 3.1 完整HTML结构 3.2 核心结构解析 3.3 实现效果说明 四、学习要点…

50周学习go语言:第三周 流程控制与FizzBuzz实现

以下是第三周流程控制与FizzBuzz游戏的详细教程&#xff0c;包含完整语法讲解和分步实现指南&#xff1a; 第三周&#xff1a;流程控制与FizzBuzz实现 一、if/else条件判断 1. 基本语法 if 条件表达式 {// true时执行 } else if 其他条件 {// 其他分支 } else {// 默认分支 }…

【MySQL 一 数据库基础】深入解析 MySQL 的索引(2)

索引 MySQL中的页 为什么要使用页&#xff1f; 在.ibd文件中最重要的结构体就是Page(页)&#xff0c;页是内存与磁盘交互的最小单元&#xff0c;默认大小为16KB&#xff0c;每次内存与磁盘的交互至少读取一页&#xff0c;&#xff0c;所以在磁盘中每个页内部的地址都是连续的; …