Boost.Rangeでdropを実装してみた
なぜかBoost.Range.Adaptorsにdropがなかったので作ってみた。slicedでdropを書けなくはないんですが、長さがわからないrangeに適用できないのが問題です。実際はtakeを先に作ったんですが、dropの方が短かったので…。
boost::copy(input | taco::drop(5), output.begin());
のように書けます。g++ 4.5必須。VC系列は動くか見てません。
Random Access Rangeである必要はない*1ので、このような処理も書けます。
std::stringstream ss("1 2 3 4 5 6 7 8 9 10"); boost::copy(boost::make_iterator_range( std::istream_iterator<int>(ss), std::istream_iterator<int>()) | taco::drop(5), output.begin());続きを読む