2012年6月13日水曜日

boost range unique 備忘録

#include <iostream>
#include <vector>
#include <boost/range/algorithm.hpp>
#include <boost/range/algorithm_ext.hpp>

void s( int n ) { std::cout << n << ","; }

int main() {
  std::vector<int> v;
  for( int i = 0; i < 20; ++i ) {
    v.push_back( (21-i) / 2 );
  }

  boost::for_each( v, s );
  std::cout << std::endl;
  boost::erase(v, boost::unique<boost::return_found_end>(boost::sort(v)));

  // boost::return_next_end は、document 間違い?
  // と思ったら、++i と消去する寸前にイテレータをインクリメントしてました… orz
  // http://www.boost.org/doc/libs/1_49_0/libs/range/doc/html/range/reference/algorithms/introduction.html
  /*
  boost::sort(v);
  boost::erase(v, boost::unique<boost::return_next_end>(v));
  */
  boost::for_each( v, s );

  return 0;
}
出力
10,10,9,9,8,8,7,7,6,6,5,5,4,4,3,3,2,2,1,1
1,2,3,4,5,6,7,8,9,10,
// コメントアウトを実行すると
1,2,3,4,5,6,7,8,9,10,6
追記:ドキュメントを良く見たら、間違いではなかったので訂正しました。

0 件のコメント: