Skip to content

Latest commit

 

History

History
36 lines (25 loc) · 1.52 KB

description.md

File metadata and controls

36 lines (25 loc) · 1.52 KB

无穷流的实现

About

实现这个类的初衷是在看sicp中介绍的流。 搜索了一下,很多的语言内置了这种数据结构。 但是C++没有内置的这种数据结构。查看了一下网上实现的 lazy stream,感觉都实现得比较复杂。 所以希望有一个比较简单清晰的实现去说明流的概念。

本代码是用C++11实现的,因为在里面大量使用lambda表示式。 而且基于C++11的方式是非常简洁明了的。

这个项目想设计得简单一点,所以没有使用指针。支持的都是数值类型。 这个实现类似于数学中集合的概念。

没有考虑iterator(ForwardIterator),所以也没有继承这个迭代器。 第二版将会支持iterator。

因为需要与iterator兼容,所以需要提供end迭代器。这个迭代器由limit确定,或者在初始化的时候确定。 否则的话它是空的。永远不会迭代到它。

流,scale,filter

               /--------+        |++++++++++++++++          /--------+
              /         |        |               |         /         |
 stream  -> <    scale  | -----> |   filter      | ----> <    scale  | -----> 
              \         |        |               |         \         |
               \--------+        |++++++++++++++++          \--------+

对于流结构,[start, step, end] 表示流,step省略表示步数为1,end省略表示无穷。

  • 过滤器支持对流进行过滤,支持多个过滤器,现只支持&
  • scale 支持对流进行放大或缩小操