Boost C++ 库

...世界上最受尊敬和专家设计的 C++ 库项目之一。 Herb SutterAndrei Alexandrescu, C++ 编码标准

boost.png (6897 bytes)

生成器迭代器适配器

定义于头文件 boost/generator_iterator.hpp

生成器迭代器适配器可以更容易地从零元函数和函数对象创建自定义输入迭代器。该适配器接受一个 生成器 并创建一个 输入迭代器 模型。每次递增都会从生成器中检索一个项目,并使其可通过解引用来检索。此迭代器的动机是,某些概念可以更自然地表示为生成器,而大多数 STL 算法都需要一个迭代器。一个例子是 随机数 库。

概要

namespace boost {
  template <class Generator>
  class generator_iterator_policies;

  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:
  typedef unspecified type; // the resulting generator iterator type 
}

模板参数

参数 描述
Generator 被包装的生成器(零元函数对象)类型。函数的返回类型必须定义为`Generator::result_type`。函数对象必须是 生成器 的模型。

概念模型

生成器迭代器类是 输入迭代器 的模型。

成员

生成器迭代器实现了 输入迭代器 概念所需的成员函数和运算符。


生成器迭代器对象生成器

`make_generator_iterator()`函数提供了一种创建生成器迭代器对象的便捷方法。该函数使用户不必显式地写出迭代器类型。

template <class Generator>
typename generator_iterator_generator<Generator>::type
make_generator_iterator(Generator & gen);

示例

以下程序展示了 `generator_iterator` 如何将生成器转换为输入迭代器。

#include <iostream>
#include <boost/generator_iterator.hpp>

class my_generator
{
public:
  typedef int result_type;
  my_generator() : state(0) { }
  int operator()() { return ++state; }
private:
  int state;
};

int main()
{
  my_generator gen;
  boost::generator_iterator_generator<my_generator>::type it = boost::make_generator_iterator(gen);
  for(int i = 0; i < 10; ++i, ++it)
    std::cout << *it << std::endl;
}

Valid HTML 4.01 Transitional

修订2006年12月5日

版权所有 © 2001 Jens Maurer

根据 Boost 软件许可证,版本 1.0 进行分发。(参见随附文件 LICENSE_1_0.txt 或复制于 https://boost.ac.cn/LICENSE_1_0.txt