class range { public: typedef std::vector<long>::iterator iterator; typedef std::vector<long>::const_iterator const_iterator; range(long end) : range(0, end) { } range(long begin, long end, long step = 1) { long diff = end - begin; if ((diff > 0 && step > 0) || (diff < 0 && step < 0)) { while(begin != end) { range_.push_back(begin); begin += step; } } } iterator begin() { return range_.begin(); } const_iterator begin() const { return range_.begin(); } iterator end() { return range_.end(); } const_iterator end() const { return range_.end(); } private: std::vector<long> range_; }; int main(int argc, char * argv []) { for (auto i : range(10, 5, -1)) { std::cout << i << std::endl; } }
Output:
10 9 8 7 6
Maybe not that much shorter, but certainly nicer than your usual way of iterating over a range:
for (std::size_t i = 10; i > 5; --i) { std::cout << i << std::endl; }
kthxbye
No comments :
Post a Comment