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