Input and output iterators are provided to make it possible for algorithmic templates to work directly with input and output streams.