Если я не ошибаюсь, я могу заставить 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)
Означает ли «изменение каких-либо элементов» действительно то, что я не могу использовать алгоритм на месте, или это говорит о другой детали, которую я неправильно истолковал?