Vik*_*ehr 5 c++ parallel-processing stl stl-algorithm c++17
并行 STL 算法是否符合std::back_insert_iterator??
我可能误解了std::par和之间的区别std::par_vec,是否std::par_vec意味着需要预先分配输出范围?
代码示例:
auto numbers = {1,2,3,4,5,6};
auto squared = std::vector<int>{};
std::transform(
**std::par/std::par_vec,**
numbers.begin(),
numbers.end(),
std::back_inserter(squared),
[](auto val) {
return val*val;
}
);
Run Code Online (Sandbox Code Playgroud)
更新
简化问题作为我的第一个问题是误读文章的结果。
并行 STL 算法是否符合 std::back_insert_iterator?
N4659规定 (28.6.4) 如下。
较旧的预执行策略重载std::transform,使用输入迭代器和输出迭代器。
template<class InputIterator, class OutputIterator, class UnaryOperation>
OutputIterator transform(InputIterator first, InputIterator last,
OutputIterator result, UnaryOperation op);
Run Code Online (Sandbox Code Playgroud)
较新的重载使用执行策略,使用前向迭代器:
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryOperation>
ForwardIterator2 transform(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, UnaryOperation op);
Run Code Online (Sandbox Code Playgroud)
因此,您似乎无法使用back_insert_iterator新的重载,因为它不满足 前向迭代器概念要求。
std::par_vec 是否意味着需要预先分配输出范围?
std::par_vec指矢量化与并行化意义上的矢量化。它指定两者都可以使用。
| 归档时间: |
|
| 查看次数: |
401 次 |
| 最近记录: |