实现这个类的初衷是在看sicp中介绍的流。 搜索了一下,很多的语言内置了这种数据结构。 但是C++没有内置的这种数据结构。查看了一下网上实现的 lazy stream,感觉都实现得比较复杂。 所以希望有一个比较简单清晰的实现去说明流的概念。
本代码是用C++11实现的,因为在里面大量使用lambda表示式。 而且基于C++11的方式是非常简洁明了的。
这个项目想设计得简单一点,所以没有使用指针。支持的都是数值类型。 这个实现类似于数学中集合的概念。
没有考虑iterator(ForwardIterator),所以也没有继承这个迭代器。 第二版将会支持iterator。
因为需要与iterator兼容,所以需要提供end迭代器。这个迭代器由limit确定,或者在初始化的时候确定。 否则的话它是空的。永远不会迭代到它。
/--------+ |++++++++++++++++ /--------+
/ | | | / |
stream -> < scale | -----> | filter | ----> < scale | ----->
\ | | | \ |
\--------+ |++++++++++++++++ \--------+
对于流结构,[start, step, end] 表示流,step省略表示步数为1,end省略表示无穷。
- 过滤器支持对流进行过滤,支持多个过滤器,现只支持&
- scale 支持对流进行放大或缩小操