c++14ではforループがPythonのようにレンジベースで操作できるようになるらしいです。
そこで、c++11でPythonのようなrangeイテレータを作ってみました。
イテレータをゼロから作るといろいろと勉強になります。
-------------------------------
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
class range{
public:
class iterator {
public:
int operator *() const { return i_; }
const iterator &operator ++() { ++i_; return *this; }
iterator operator ++(int) { iterator copy(*this); ++i_; return copy; }
bool operator ==(const iterator &other) const { return i_ == other.i_; }
bool operator !=(const iterator &other) const { return i_ != other.i_; }
iterator(int start) : i_ (start) { }
private:
unsigned long i_;
};
public:
range(int start,int stop):a_(start),b_(stop){}
iterator begin() const { return iterator(a_); }
iterator end() const { return iterator(b_); }
public:
int a_,b_;
};
int main () {
range i(0,5);
for(int a:i)printf("a=%d\n",a);
return 0;
}
0 件のコメント:
コメントを投稿