在头文件中定义 boost/iterator/generator_iterator.hpp
生成器迭代器适配器简化了从零元函数和函数对象创建自定义输入迭代器的过程。该适配器接受一个 Generator(生成器) 并创建一个 Input Iterator(输入迭代器) 的模型。每次递增都会从生成器获取一个项目,并通过解引用使其可供检索。设计此迭代器的动机在于,有些概念更自然地用生成器来表达,而大多数 STL 算法期望的是迭代器。例如 Random Number(随机数) 库。
namespace boost {
namespace iterators {
template <class Generator>
class generator_iterator_generator;
template <class Generator>
typename generator_iterator_generator<Generator>::type
make_generator_iterator(Generator & gen);
}
}
类 generator_iterator_generator 是一个辅助类,旨在构造生成器迭代器类型。该类的模板参数是被包装的 Generator(生成器)函数对象类型。生成器迭代器适配器仅保持对函数对象的引用(或指针),因此函数对象必须在从其构造的生成器迭代器适配器之前存活。
template <class Generator>
class generator_iterator_generator
{
public:
using type = unspecified; // the resulting generator iterator type
};
| Parameter | 描述 |
|---|---|
| Generator | 被包装的生成器(零元函数对象)类型。函数的返回类型会自动从其operator()。函数对象必须是 Generator(生成器) 的模型。 |
生成器迭代器类是 Input Iterator(输入迭代器) 的模型。
生成器迭代器实现了 Input Iterator(输入迭代器) 概念所要求的成员函数和运算符。
该make_generator_iterator()该函数提供了一种便捷的方式来创建生成器迭代器对象,省去用户显式写出迭代器类型的麻烦。
template <class Generator> typename generator_iterator_generator<Generator>::type make_generator_iterator(Generator & gen);
下面的程序演示了 generator_iterator 如何将生成器转换为输入迭代器。
#include <iostream>
#include <boost/iterators/generator_iterator.hpp>
class my_generator
{
public:
using result_type = int;
my_generator() : state(0) { }
result_type operator()() { return ++state; }
private:
int state;
};
int main()
{
my_generator gen;
auto it = boost::iterators::make_generator_iterator(gen);
for(int i = 0; i < 10; ++i, ++it)
std::cout << *it << std::endl;
}
修订2006 年 12 月 05 日
版权 © 2001 Jens Maurer
根据 Boost 软件许可 1.0 版分发。(请参阅附带文件 LICENSE_1_0.txt 或在 https://boost.ac.cn/LICENSE_1_0.txt 复制)