
12.11.2013 19:41, Eric Niebler:
I've now built a filter_range, transform_range, and an istream_range in this vein. Initial results are looking promising, but I haven't benchmarked performance, yet. A commenter on my blog claims to have benchmarked perf of istream_range, with good results, which is encouraging.
While new "slim" istream_range is faster than version with "fat" iterators, it is still not the fastest possible. In particular, it does two comparisons per cycle iteration: one is "!rng_->next()", and another is comparison of iterators, like "it != last". But it is possible to do only one comparison per iteration, like http://coliru.stacked-crooked.com/a/b0a989aa0b2e9741 : while(!empty(it)) { cout << *it << " "; ++it; } We can have new fast algorithms for such iterators. Such iterators are not replacement of STL iterators, but complementary. It is OK to have different iterators and different algorithms for different kinds of things - http://www.youtube.com/watch?v=COuHLky7E2Q&t=42m18s . Plus, when backward compatibility matters - we can use adaptors like you showed. -- Evgeny Panasyuk