Thanks for all the suggestions.
Actually, this is a one-off program for which I want a correct solution in
the minimal lines of code. So paramount for me is just sticking together
that which is known to work.
Investigating this further, here is what I've found.
The spirit multi-pass iterator is almost ideal. It is a one liner - I like
that.
One can specify a different storage policy - fixed_queue so that
as long as I know that my pattern doesn't exceed a certain size, it will
handle and unbounded file while still keeping a bound on the amount of
storage used. It even will throw an exception if make an error and the
internal buffer overflows. The authors even made a typedef for this version
of multi-pass which they call lookahead. Could this be
more perfect for my application? I don't think so.
But alas, there's a rub. multi-pass hardcodes "forward_iterator_tag" rather
than inheriting the trasversal_tag from it's storage policy - in this case
"random_access_tag". So even though all the code is there and it would work
(I believe) I'm stuck. It's so close, that I'm considering making a tweaked
version of multi-pass to fix this problem. I'm loath to do this as the
implementation is sufficiently general that its a whole learning curve to
understand enough to mess with it with confidence. And of course the time
invested has to be weighed against using a cruder solution.
This is one of the most frustrating things about working with libraries and
computers. The curse of things that "almost work". It's maddening. Note
that I'm not blaming anyone. Its the two-edge sword of importing code.
Robert Ramey