2012年8月22日水曜日

boost range accumulate 習作

 対象のクラスが保持している要素数を数え上げるというパターンを range でチーンするには? 今回は、VC10で確認しました。 range でぶん回す対象と、加算する対象の型が違う時、どうするんだろ?と思ってたけど、ちゃんと考慮されているみたいです。
#include <boost/range/numeric.hpp>
#include <iostream>
#include <vector>

class foo {
public:
  int count_;
public:
  foo() : count_() {}
};

int take( int n, const foo& f ) { return n + f.count_; }


int main() {
  std::vector<foo> v;
  for( int i = 0; i < 20; ++i ) {
    foo f;
    f.count_ = i + 1;
    v.push_back( f );
  }

  int sum = boost::accumulate( v, 0, take );

  std::cout << sum << std::endl;

  return 0;
}

追伸:Bloggerの分類ラベル C++ が認識できない。全部 cpp に書き換えるのしんどい。どうしよう。以前は認識できてたのに…

0 件のコメント: