【发布时间】:2020-02-04 04:55:16
【问题描述】:
如果我没记错的话,我可以让std::transform 执行就地,方法是使用与输入和输出迭代器相同的范围。假设我有一些std::vector 对象vec,那么我会写
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
使用合适的一元运算unary_op。
使用 C++17 标准,我想通过在其中粘贴 std::execution::par 作为第一个参数来并行执行转换。这将使函数在cppreference article on std::transform 中从重载 (1) 变为 (2)。然而,这个重载的 cmets 说:
unary_op[...] 不得使任何迭代器无效,包括结束迭代器,或修改所涉及范围的任何元素。 (C++11 起)
“修改任何元素”是否真的意味着我不能在适当的位置使用算法,或者这是在谈论我误解的不同细节?
【问题讨论】:
标签: c++ parallel-processing stl c++17