Re: Use of input iterators
Since forward iterators are input iterators, if you have an algorithm that works as efficiently with input iterators as with forward iterators, then you might as well write it with input iterators in mind so that it would work with forward iterators too, even if it never actually gets used with input iterators that are not forward iterators.
For example, you could use input iterators to initialise a container, just as you could use the iterators from another container to initialise that container.