我正在尝试将此代码段编译为
#include <vector>
#include <numeric>
#include <execution>
double result = std::reduce(std::execution::par, v.begin(), v.end());
我试过这些编译器:
Apple LLVM version 8.1.0 (clang-802.0.42)
clang version 3.8.0-2ubuntu4 (tags/RELEASE_380/final)
g++ (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 20160609
这三个人都给了我'execution' file not found
分别为error: no member named 'reduce' in namespace 'std'
auto result = std::reduce(v.begin(), v.end());
此代码段
#include<numeric>
#include<vector>
int main(int argc, char *argv[])
{
std::vector<double> v(10, 1);
auto result = std::reduce(v.begin(), v.end());
return 0;
}
我猜我的编译器太旧了?但是on cppreference它没有说哪个编译器版本最低,而且我没有在repo中看到任何更新版本的clang或gcc。
答案 0 :(得分:11)
std::reduce
和std::execution::par
可用。
对于大多数编译器而言,C ++ 17还没有完全实现。您可以尝试使用带有标记-std=c++1z
的clang。
答案 1 :(得分:1)
我将我的GCC升级到了版本10,它用包含std::execution::par
的{{1}}进行了很好的编译(在gcc版本7.5.0中找不到)。我按照此链接中的说明进行操作:https://tuxamito.com/wiki/index.php/Installing_newer_GCC_versions_in_Ubuntu