忘れないうちに書いとく。
標準ライブラリ内のclassであるlistのメンバ関数には
template<class _Pr1>
void remove_if(_Pr1 _Pred)が存在する。
これは「listの要素で条件に適合するものを除去する」というものだが「そもそも条件ってなんぞや」という話になる。私もそうなった。で、こっそりVC++での実装を見たのだがどうやらこうやって使うらしい。
つまり引数として関数オブジェクトを渡し、その関数オブジェクトに引数として要素を渡し、その返り値がtrueならその要素を消すというものだ。
そこで無名関数の登場である。返り値をbool型(別にintでもいいが)、引数をlistの要素の型にすれば関数の返り値がtrueとなれば削除される。
「3の倍数だけ消す」とか「ある動作をそれぞれ実行させてその返り値がtrueのやつだけ消す」とかいう動作を実現できる。ぜひ使ってみてはいかがだろうか。
PR