在C++中实现for range

如代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
// 当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。
// 对于iterator,实现如下方法:operator!=(), operator*(), operator++()
// 对于容器,实现如下方法:begin(), end()
class Iter
{
public:
explicit Iter(int a) : _value(a) {}
bool operator!=(const Iter i) { return this->GetValue() != i.GetValue(); }
int operator*() const { return this->GetValue(); }
const Iter &operator++() { return ++_value, *this; }
int GetValue() const { return _value; }

private:
int _value;
};

class range
{
public:
explicit range(int a, int b) : _begin(a), _end(b) {}
Iter begin() { return Iter(_begin); }
Iter end() { return Iter(_end); }

private:
int _begin;
int _end;
};

效果

1
2
for (auto x : range(0, 10))
cout << x << " ";
1
2
#output
0 1 2 3 4 5 6 7 8 9