Jika saya tidak salah, saya dapat melakukan std::transform
perform di tempat dengan menggunakan rentang yang sama sebagai input dan output iterator. Anggaplah saya memiliki beberapa std::vector
objek vec
, maka saya akan menulis
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
menggunakan operasi unary yang cocok unary_op
.
Menggunakan standar C ++ 17, saya ingin menjalankan transformasi secara paralel dengan menempelkannya std::execution::par
di sana sebagai argumen pertama. Ini akan membuat fungsi beralih dari kelebihan (1) ke (2) di artikel cppreference aktifstd::transform
. Namun komentar untuk kelebihan ini mengatakan:
unary_op
[...] tidak boleh membatalkan iterator apa pun, termasuk iterator akhir, atau memodifikasi elemen apa pun dari rentang yang terlibat. (sejak C ++ 11)
Apakah "memodifikasi elemen apa pun" benar-benar berarti saya tidak dapat menggunakan algoritma di tempat atau apakah ini berbicara tentang detail yang berbeda yang saya salah artikan?