2012年6月8日金曜日

boost::range 配列添字を処理するテスト

レンジでチーンと気分よくコード書いてたら、実は、後で、どの位置から取ってきたかを記録しときたい事に気がつきました。なんとなく危険な香りがするので、テストコードを書いて見ることに…なるほど…
#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 件のコメント: