Якщо я не помиляюсь, я можу змусити std::transform
виконати на місці , використовуючи той самий діапазон, що ітератор вводу та виводу. Припустимо, у мене є якийсь std::vector
предмет vec
, тоді я б писав
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
використовуючи відповідну одинарну операцію unary_op
.
Використовуючи стандарт C ++ 17, я хотів би виконати перетворення паралельно, вставивши std::execution::par
туди в якості першого аргументу. Це призведе до переходу функції від перевантаження (1) до (2) в статті cppreference наstd::transform
. Однак коментарі до цього перевантаження кажуть:
unary_op
[...] не повинен визнати недійсним жодних ітераторів, включаючи кінцеві ітератори, або змінювати будь-які елементи діапазонів, що стосуються. (оскільки C ++ 11)
Чи "зміна будь-яких елементів" насправді означає, що я не можу використовувати алгоритм на місці або це говорить про іншу деталь, яку я неправильно інтерпретував?