定义于头文件 boost/iterator/generator_iterator.hpp
生成器迭代器适配器使得从 0 元函数和函数对象创建自定义输入迭代器变得更容易。适配器接受一个 生成器 并创建一个 输入迭代器 的模型。每次递增都会从生成器中检索一个项目,并使其可通过解引用来检索。此迭代器的动机是某些概念可以更自然地表达为生成器,而大多数 STL 算法期望的是迭代器。一个例子是 随机数 库。
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 是一个辅助类,其目的是构造生成器迭代器类型。此类的模板参数是被包装的生成器函数对象类型。生成器迭代器适配器仅持有对函数对象的引用(或指针),因此函数对象的生命周期必须长于从中构造的生成器迭代器适配器。
template <class Generator> class generator_iterator_generator { public: using type = unspecified; // the resulting generator iterator type };
参数 | 描述 |
---|---|
Generator | 被包装的生成器(0 元函数对象)类型。函数的返回类型从它的operator()自动推导。函数对象必须是 Generator 的模型。 |
生成器迭代器类是 输入迭代器 的模型。
生成器迭代器实现了 输入迭代器 概念所需的成员函数和运算符。
函数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 复制)