Wenn ich mich nicht täuscht, kann ich std::transform
ausführen anstelle unter Verwendung des gleichen Bereichs als Ein- und Ausgang Iterator. Angenommen, ich habe ein std::vector
Objekt vec
, dann würde ich schreiben
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
unter Verwendung einer geeigneten unären Operation unary_op
.
Unter Verwendung des C ++ 17-Standards möchte ich die Transformation parallel ausführen, indem ich std::execution::par
dort als erstes Argument ein In stecke. Dies würde dazu führen, dass die Funktion von Überladung (1) nach (2) im Referenzartikel weiter wechseltstd::transform
. Die Kommentare zu dieser Überladung lauten jedoch:
unary_op
[...] dürfen keine Iteratoren, einschließlich der Enditeratoren, ungültig machen oder Elemente der beteiligten Bereiche ändern. (seit C ++ 11)
Bedeutet "Elemente ändern" wirklich, dass ich den Algorithmus nicht verwenden kann, oder handelt es sich um ein anderes Detail, das ich falsch interpretiert habe?