DOSEIの日記

技術メモ+日常ログ

STL algorithm for_each は要素を変更していい

要するに

for_each は、 "non-modifying sequence operation" (シーケンスを変更しない操作) となっているので、与える関数は一見要素を変更してはいけないように思える。しかし、 C++03 ではできない旨の記述はなく、また C++11 では明確にできるというノートがついた。

なので、 f(T x) でも f(T& x) でも f(const T& x) でもよくて、値を変更してもよい。上記の分類の意味は、 for_each 自体はシーケンスを何もいじらない、という程度の意味らしい。