アルゴリズムの出力要素を数える

counting_iteratorで思い出した小ネタ。
unique_copy()の出力の要素数を知りたい場合(出力自体には興味がない)、どうするか。
vectorにback_inserterで追加してsize()を調べるのは、明らかに無駄が多いです。
名前からしてcounting_iteratorでできそうな気がして試してみましたが、入力要素(value_type)とカウンタ(difference_type)の間で代入が発生してダメです。
結局その時は、まんまな方法を取りました。

#include <boost/function_output_iterator.hpp>
#include <boost/lambda/lambda.hpp>
#include <algorithm>
#include <iterator>

template <class InputIterator>
inline typename std::iterator_traits<InputIterator>::difference_type
unique_count(InputIterator first, InputIterator last)
{
    typename std::iterator_traits<InputIterator>::difference_type n = 0;

    std::unique_copy(
        first, last,
        boost::make_function_output_iterator(++boost::lambda::var(n))
    );

    return n;
}

lambdaのExpression Templateに頼っているせいで、出力反復子をライブラリとして切り出せないのが難点です。counting_iteratorを真似てきちんと作れば、役に立つかもしれません。