std::for_each() を使えばよろしい,と思った.
以下,ダメな例:
#include <algorithm> #include <list> #include <vector> void clear(std::list<int> l) { l.clear(); } int main(int argc, char **argv) { std::vector<std::list<int> > data; /* snip */ std::for_each(data.begin(), data.end(), clear); /* snip */ return 0; }以下,動く例:
#include <algorithm> #include <list> #include <vector> void clear(std::list<int> &l) { l.clear(); } int main(int argc, char **argv) { std::vector<std::list<int> > data; /* snip */ std::for_each(data.begin(), data.end(), clear); /* snip */ return 0; }どこが違うか? for_eachの引数として与える関数の引数を参照渡しにするかどうか,だけ.しかも,宣言部のみ.また値渡しの方は,全要素コピーが発生している? 気をつけよう.
追記: しかしながら,メンバ関数をfor_eachの第3引数にする場合は,bind1st と mem_ref を使うのが定石らしく,かつ,参照呼び出しは,boostまで導入せねばならないようだ.読んだだけで未確認.
http://hippos-lab.com/blog/node/319
そこまでせなあかんのやったら,もう明示的にループまわすわ...
0 件のコメント:
コメントを投稿