gpt4 book ai didi

c++ - 并行 STL 是否处理插入迭代器,例如 std::back_insert_iterator?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:59:52 26 4
gpt4 key购买 nike

并行 STL 算法是否符合 std::back_insert_iterator??

我可能误解了 std::parstd::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;
}
);

更新

简化问题,因为我的第一个问题是误读了一篇文章。

最佳答案

Are parallel STL algorithms compliant with a 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概念要求。

does std::par_vec mean that the output range is required to be pre-allocated?

std::par_vec 指的是 vectorization vs. parallelization 意义上的矢量化.它指定两者都可以使用。

关于c++ - 并行 STL 是否处理插入迭代器,例如 std::back_insert_iterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44788310/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com