Jeśli się nie mylę, mogę wykonać std::transformdziałanie w miejscu , używając tego samego zakresu co iterator wejściowy i wyjściowy. Załóżmy, że mam jakiś std::vectorprzedmiot vec, a potem napiszę
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
przy użyciu odpowiedniej operacji jednoargumentowej unary_op.
Korzystając ze standardu C ++ 17, chciałbym wykonać transformację równolegle, wstawiając std::execution::partam jako pierwszy argument. Spowodowałoby to przejście funkcji z przeciążenia (1) na (2) w artykule o preferencjach cpstd::transform . Jednak komentarze do tego przeciążenia mówią:
unary_op[...] nie może unieważniać żadnych iteratorów, w tym iteratorów końcowych, ani modyfikować żadnych elementów zaangażowanych zakresów. (od C ++ 11)
Czy „modyfikowanie jakichkolwiek elementów” naprawdę oznacza, że nie mogę użyć algorytmu na miejscu, czy chodzi tu o inny szczegół, który źle zinterpretowałem?