生成器类可以使用基于范围的for循环吗
时间: 2024-01-29 22:04:44 浏览: 68
C++11的for循环,以及范围Range类的简单实现
是的,生成器类可以使用基于范围的 for 循环(range-based for loop)。基于范围的 for 循环是 C++11 引入的新特性,它可以用来遍历一个序列中的所有元素。生成器类是一个可以生成序列的类,所以可以使用基于范围的 for 循环来遍历生成器生成的序列。
例如,假设我们有一个生成器类,可以生成一系列斐波那契数列中的数字,我们可以使用基于范围的 for 循环来遍历这些数字,例如:
```c++
#include <iostream>
class FibonacciGenerator {
public:
FibonacciGenerator(int n) : n_(n) {}
class Iterator {
public:
Iterator(int n) : n_(n), a_(0), b_(1) {}
int operator*() const {
return b_;
}
Iterator& operator++() {
const int tmp = b_;
b_ += a_;
a_ = tmp;
--n_;
return *this;
}
bool operator!=(const Iterator& other) const {
return n_ != other.n_;
}
private:
int n_;
int a_;
int b_;
};
Iterator begin() const {
return Iterator(n_);
}
Iterator end() const {
return Iterator(0);
}
private:
int n_;
};
int main() {
FibonacciGenerator fib(10);
// 使用基于范围的 for 循环遍历生成器生成的序列
for (int i : fib) {
std::cout << i << " ";
}
std::cout << std::endl;
return 0;
}
```
在这个例子中,我们定义了一个生成器类 FibonacciGenerator,用来生成斐波那契数列中的数字。生成器类中定义了一个内部类 Iterator,用来迭代生成的序列。在 FibonacciGenerator 类中,我们重载了 begin() 和 end() 方法,用来返回 Iterator 对象,从而支持基于范围的 for 循环。在 main() 函数中,我们创建了 FibonacciGenerator 对象 fib,并使用基于范围的 for 循环来遍历生成器生成的序列。
阅读全文