并行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;
}
);
更新
简化问题,因为我的第一个问题是误读文章的结果。
答案 0 :(得分:3)
并行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);
较新的重载,使用执行策略,使用前向迭代器:
template<class ExecutionPolicy, class ForwardIterator1, class ForwardIterator2, class UnaryOperation>
ForwardIterator2 transform(ExecutionPolicy&& exec,
ForwardIterator1 first, ForwardIterator1 last,
ForwardIterator2 result, UnaryOperation op);
因此,似乎您不能将back_insert_iterator
与新重载一起使用,因为它不符合forward iterators概念要求。
std :: par_vec是否意味着需要预先分配输出范围?
std::par_vec
是指vectorization vs. parallelization意义上的矢量化。它指定两者都可以使用。