Si je ne me trompe pas, je peux faire std::transform
fonctionner en place en utilisant la même plage qu'un itérateur d'entrée et de sortie. Supposons que j'ai un std::vector
objet vec
, alors j'écrirais
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
en utilisant une opération unaire appropriée unary_op
.
En utilisant la norme C ++ 17, je voudrais exécuter la transformation en parallèle en collant un std::execution::par
dedans comme premier argument. Cela ferait passer la fonction de surcharge (1) à (2) dans l' article de référence surstd::transform
. Cependant, les commentaires sur cette surcharge indiquent:
unary_op
[...] ne doit invalider aucun itérateur, y compris les itérateurs finaux, ni modifier aucun élément des plages concernées. (depuis C ++ 11)
Est-ce que «modifier des éléments» signifie vraiment que je ne peux pas utiliser l'algorithme en place ou s'agit-il d'un détail différent que j'ai mal interprété?