在 C++ 中使用 reduce() 和 std::execution 时出现编译错误
Posted
技术标签:
【中文标题】在 C++ 中使用 reduce() 和 std::execution 时出现编译错误【英文标题】:Compilation error while using reduce() and std::execution in C++ 【发布时间】:2020-05-02 18:00:31 【问题描述】:我正在尝试实现一个简单的用例reduce()
和std:: execution
。我对以下代码使用 C++ 17 标准。但是,下面的代码仍然没有被编译。
#include <iostream>
#include <numeric>
#include <vector>
#include <algorithm>
#include <execution>
int main()
std:: vector<int> vec(10);
std:: iota(std::begin(vec), std::end(vec), 1);
const auto result = std::reduce(std::execution::par, std::begin(vec),
std::end(vec));
std:: cout << result;
return 0;
错误:
C:\Users\Blind1729\Desktop>g++ --std=c++17 a.cpp
a.cpp: In function 'int main()':
a.cpp:8:25: error: 'reduce' is not a member of 'std'
const auto result = std::reduce(std::execution::par, std::begin(vec),
^
a.cpp:8:42: error: 'std::execution' has not been declared
const auto result = std::reduce(std::execution::par, std::begin(vec),
【问题讨论】:
std::reduce
在<numeric>
你用的是什么版本的g++? 并行标准化 TS P0024R2 9.x 你必须至少有 9.x 的 G++。见reference
GCC 5.1 于 2015 年发布,对于 C++17 来说有点旧
@IgorR。当您将鼠标悬停在功能 C++ Standardization of Parallelism TS 中的 9.x(作为 G++)上时,将显示 需要与 -ltbb 链接。
在这里编译并运行良好,使用 gcc 9.2.1 和 g++ --std=c++17 reduce.cc -ltbb
。
【参考方案1】:
您需要链接到 TBB,因为它依赖于并行 STD(请参阅 C++17 STL Parallel Algorithms - with GCC 9.1 and Intel TBB on Linux and macOS):
g++ --std=c++17 a.cpp -ltbb
并确保您至少安装了 GCC 9.1。
【讨论】:
以上是关于在 C++ 中使用 reduce() 和 std::execution 时出现编译错误的主要内容,如果未能解决你的问题,请参考以下文章
找不到标头`execution`和`std::reduce`
如何使用 g++6 编译带有 std::reduce 和 #include <execution_policy> 的代码?
mapreduce C++ lambda:候选不可行的单个参数