2014年1月7日火曜日

C++でrangeイテレータを作ってみた。

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 件のコメント:

コメントを投稿