Если я не ошибаюсь, я могу заставить std::transform
выполнить вместо , используя тот же диапазон, что и итератор ввода и вывода. Предположим, у меня есть некоторый std::vector
объект vec
, тогда я бы написал
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
, используя подходящую унарную операцию unary_op
.
Используя стандарт C ++ 17, я быхотел бы выполнить преобразование параллельно, вставив туда std::execution::par
в качестве первого аргумента. Это заставит функцию перейти от перегрузки (1) к (2) в статье cppreference на std::transform
. Однако в комментариях к этой перегрузке говорится:
unary_op
[...] не должно делать недействительными какие-либо итераторы, включая конечные итераторы, или изменять любые элементы задействованных диапазонов. (начиная с C ++ 11)
Действительно ли "изменить какие-либо элементы" означает, что я не могу использовать алгоритм на месте, или это говорит о другой детали, которую я неправильно истолковал?