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 につっこんじまえと思ってそうしてみた。なんというか、冗長なのかどうなのか微妙。