counter

incrementor と言った方がいいかな。

以下のような classical な code を

#include <vector>

int main(void) {
    std::vector<int> ints;
    for (int i = 0; i < upper; ++i) ints.push_back(i);

    return 0;
}

STL algorithm の std::generate() や std::generate_n() を使って書き換えようとすると以下のようになると思うんだけど ( 超テケトー実装 )

#include <vector>
#include <algorithm>

// for std::generate() and std::generate_n()
template<typename T> class counter {
    public:
        typedef T count_type;

    private:
        count_type first, returned;
        const count_type increment;

    public:
        counter(count_type first, count_type increment)
            : first(first), increment(increment) {}
        count_type operator()(void) {
            returned = first;
            first += increment;
            return returned;
        }

    private:
        counter& operator=(const counter& rhs);
};

int main(void) {
    std::vector<int> ints;
    const int upper = 10;

    std::generate_n(
            std::back_inserter(ints), upper,
            util::algorithm::counter<int>(0, 1));

    return 0;
}

これくらいの class ならもう library につっこんじまえと思ってそうしてみた。なんというか、冗長なのかどうなのか微妙。