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