Jeśli się nie mylę, mogę wykonać std::transform
działanie w miejscu , używając tego samego zakresu co iterator wejściowy i wyjściowy. Załóżmy, że mam jakiś std::vector
przedmiot 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::par
tam 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?