现代 C++ 中 STL 算法的执行策略17 Mar 2025 | 5 分钟阅读 现代 C++ 中的标准模板库 (STL) 提供了广泛的算法,可在基本序列(包括向量、数组和列表)上运行。这些算法适用于不同的迭代器,并作为模板函数实现。这些算法以泛型编程的基本原理为基础构建,并广泛使用迭代器来抽象底层数据结构。 在 STL 算法的上下文中,执行策略描述了算法如何并行运行。这是在 C++17 中添加的,旨在使程序员能够在处理大数据集时在特定算法中使用并行性。以下是三种执行策略: 1. 顺序执行此策略,即 std::execution::seq(顺序执行),确保了这一点。如果没有提供执行策略,则使用默认执行策略。它确保算法将在单个线程中运行,并且执行顺序将与输入迭代器的序列匹配。 语法它具有以下语法: 示例让我们举一个例子来说明 C++ 中的 **顺序执行**。 输出 ![]() 2. 标准::执行::并行 (并行执行)此策略允许并行算法执行。是否使用线程、矢量化或任何其他并行化技术由实现决定;C++ 标准库不强制规定如何实现并行性。 语法它具有以下语法: 示例让我们举一个例子来说明 C++ 中的 **并行执行**。 输出 ![]() **3. 并行非序列执行**,或 **std::execution::par_unseq**,是一种与 **std::execution::par** 类似的策略,但允许算法的矢量化。这意味着除了能够并行运行之外,算法还可以被矢量化,以提高单个迭代的性能。 语法 它具有以下语法: 示例 让我们举一个例子来说明 C++ 中的 **并行非序列执行**。 输出 ![]() 重要的是要记住,并非所有算法都可以从并行执行中受益,并且性能增益的大小将取决于算法的性质、数据的大小和硬件架构。在选择并行执行策略之前,应进行性能分析和测量,因为同步和其他因素可能导致并行执行引入开销。 示例以下是一个简单的示例,演示了将 **std::execution::par** 与 **std::for_each** 结合使用: 输出 ![]() 说明 在此示例中,**lambda 函数** 并行应用于每个向量元素,使每个元素加倍。 执行策略之间的性能比较可以使用一个简单的 C++ 程序来比较执行策略之间的性能差异,如下所示: 输出 ![]() 说明 如您所见,最快的执行策略是 unsequenced_policy,因为它进行了矢量化。接下来是 parallel_policy,然后是 parallel_unsequenced_policy。最终,您按照计划的顺序执行了执行技术。 重要的是要记住,并非每个算法都支持每个执行策略,并且根据选择的执行策略,某些算法的性能可能会有所不同。选择最适合任务要求和手头硬件的执行策略至关重要。您还应该测试各种策略,以找到特定任务的最佳策略。 现代 C++ 中 STL 算法执行策略的优点由于 C++17 中在 STL 算法中添加了执行策略,开发人员现在可以管理特定算法的并行执行。此功能有几个优点:
重要的是要记住,并非所有算法都同样受益于并行化,并且并行执行的效率因算法性质、大小和硬件架构等多个变量而异。建议使用性能分析和仔细考虑来确定在特定情况下执行策略的最佳使用。 |
?在学习 C 和 C++ 编程语言中 void 函数的区别因素之前,让我们看几个例子,深入理解 void 函数的使用场景、我们可以从中得出的用例等等。Void fun顾名思义,void 就是什么都没有...
阅读 3 分钟
在本文中,您将学习它们的语法和示例。但在学习 prefix() 和 suffix() 函数之前,您必须了解 C++ 中的 Regex 表达式。使用 <regex> 头文件提供的正则表达式与 std::match_results 类结合使用...
阅读 4 分钟
设计模式是在软件设计中反复出现的问题的成熟解决方案,由经验丰富的软件工程师开发。它们提供了一种标准化和改进软件系统设计的方法,使其更易于维护、修改和扩展。在 C++ 中,有许多不同的……
阅读 6 分钟
在 C++ 中,如果基类中存在同名的多个重载方法,程序员可以使用 "using" 声明在派生类中隐藏它们。这被称为方法隐藏。在本文中,我们将讨论如何隐藏所有重载方法...
阅读 4 分钟
在本文中,我们将讨论 C++ 和 GO 之间的区别。但在讨论它们之间的区别之前,我们必须了解 C++ 和 Go 以及它们的示例和用途。C++ 编程语言是什么?C++ 是一种高级通用编程语言,其创建目的是...
阅读 4 分钟
在本文中,我们将讨论 C++ 中的 forward_list merge() 函数,包括其语法和示例。forward_list 是一个序列容器,允许在序列中的任何位置进行常数时间插入和删除操作。forward_list 是使用单向链表创建的。顺序是维护的...
阅读 2 分钟
:归并排序是一种流行的排序算法,它使用“分而治之”的原理有效地对元素列表或数组进行排序。归并排序的工作原理概述如下:Divide:如果元素数量为奇数,则将未排序的列表分成两个相等的(或...
阅读 10 分钟
在本课中,我们将探讨如何在 C 和 C++ 中显示字符串中元音和辅音数量相同的子字符串。给定一个字符串 S,目标是显示该字符串中具有相等数量的子字符串...
阅读 3 分钟
Boost C++ 库是一系列免费开源库,为 C++ 程序员提供了广泛的功能。Boost 旨在补充 C++ 标准库并添加其缺失的功能。Boost 是一个社区驱动的项目,该项目...
阅读 4 分钟
在本文中,您将学习 C++ 中费马小定理的实现。但在实现之前,您必须了解费马小定理。什么是费马小定理?以法国数学家皮埃尔·德·费马命名的费马小定理……
阅读 4 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India