Si no me equivoco, puedo hacer que std::transform
funcione en su lugar usando el mismo rango que un iterador de entrada y salida. Supongamos que tengo algún std::vector
objeto vec
, entonces escribiría
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
utilizando una operación unaria adecuada unary_op
.
Usando el estándar C ++ 17, me gustaría ejecutar la transformación en paralelo pegando una std::execution::par
como el primer argumento. Esto haría que la función pasara de sobrecarga (1) a (2) en el artículo cppreference sobrestd::transform
. Sin embargo, los comentarios a esta sobrecarga dicen:
unary_op
[...] no debe invalidar ningún iterador, incluidos los iteradores finales, ni modificar ningún elemento de los rangos involucrados. (desde C ++ 11)
¿"Modificar algún elemento" realmente significa que no puedo usar el algoritmo en el lugar o se trata de un detalle diferente que interpreté mal?