レンジでチーンと気分よくコード書いてたら、実は、後で、どの位置から取ってきたかを記録しときたい事に気がつきました。なんとなく危険な香りがするので、テストコードを書いて見ることに…なるほど…
#include <boost/range/algorithm/for_each.hpp>
#include <boost/bind.hpp>
#include <boost/ref.hpp>
#include <iostream>
#include <vector>
struct hoge {
hoge( int i ) : i_(i) {}
int i_;
};
void func( const hoge& h, int pos ) {
std::cout << pos << ",";
}
void func2( const hoge& h, int& pos ) {
std::cout << pos++ << ",";
}
int main() {
std::vector<hoge> v;
for( int i = 0; i < 10; ++i ) v.push_back( i );
int n = 0;
boost::for_each( v, boost::bind( func, _1, n++ ) );
std::cout << std::endl;
n = 0;
boost::for_each( v, boost::bind( func2, _1, boost::ref(n) ) );
return 0;
}
結果 vc8
0,0,0,0,0,0,0,0,0,0
0,1,2,3,4,5,6,7,8,9
フィルターをかましたら、添字の位置もズレてしまうんで、zip して渡す方がスマートなのかも…暇があったら試してみるかな?
0 件のコメント:
コメントを投稿