There are various STL algorithms that rely on an output iterator to store the result of the algorithm.
For example, std::set_intersection
will store all the common elements between two sorted ranges in an Output iterator that is then post incremented per element outputted.
Sometimes, I am not interested in the actual elements but only the number of output elements. In such cases it is a waste of memory and performance to copy the elements. Is there an iterator adapter that I can use to count and avoid the copy of the elements? If not can you suggest a generic implementation of such an adapter?
Thanks to a lot of help from @ecatmur answer and comments, I have the following solution, which I invite comments. I had hoped to get the
boost::make_function_output_iterator
working but it seems that there is a bug in the library which fails to define the assignment operator.Boost's Function Output Iterator can do what you want:
The only issue is that you have to declare the count variable outside the iterator, because there's no way to extract the stored function object from a
boost::function_output_iterator
(and also no way to extract the closure values from a lambda, even if you got past that hurdle). If you want to be able to write one-liners, you'll have to write the iterator class yourself, but it's not a huge amount of code; for example:Usage: