間違えなければ 、入出力イテレータと同じ範囲を使ってその場でstd::transform
実行させることができます。私がいくつかのstd::vector
オブジェクトを持っていると仮定してvec
、私は書くでしょう
std::transform(vec.cbegin(),vec.cend(),vec.begin(),unary_op)
適切な単項演算を使用しますunary_op
。
C ++ 17標準を使用しstd::execution::par
て、最初の引数としてinを付けて、変換を並列実行したいと思います。これにより、関数がのcppreference記事のstd::transform
オーバーロード(1)から(2)に変わります。ただし、このオーバーロードへのコメントは次のように述べています。
unary_op
[...]終了反復子を含むすべての反復子を無効にしたり、関係する範囲の要素を変更したりしてはなりません。(C ++ 11以降)
「要素を変更する」とは、実際にアルゴリズムを使用できないことを意味しますか、それとも、誤って解釈した別の詳細について話しているのですか?