> Isn't an iterator that outputs data to its recipient container not an iterator, but rather some type of filling API?
Sure, but it makes sense for this api to have the same interface as an iterator so that existing iterators can be used without an adapter.
> Isn't a random access iterator not an iterator but rather a slice view?
It is an iterator that supports additional functions. You can use a random access oterators with functions that take output iterators, forward iterators, multipass iterators etc. Of you had untelated concepts for each use case the system would be more complex.
> Isn't a contiguous iterator a leaky abstraction in that an iterator is just an interface that shouldn't expose how the data backing it is stored?
Seeing thought abstractions and specializing algorithms is what makes STL style generic code efficient.
And it is not inconsistent at all. Stepanov has written in grat details about the theoretical fundations of his design.
Sure, but it makes sense for this api to have the same interface as an iterator so that existing iterators can be used without an adapter.
> Isn't a random access iterator not an iterator but rather a slice view?
It is an iterator that supports additional functions. You can use a random access oterators with functions that take output iterators, forward iterators, multipass iterators etc. Of you had untelated concepts for each use case the system would be more complex.
> Isn't a contiguous iterator a leaky abstraction in that an iterator is just an interface that shouldn't expose how the data backing it is stored?
Seeing thought abstractions and specializing algorithms is what makes STL style generic code efficient.
And it is not inconsistent at all. Stepanov has written in grat details about the theoretical fundations of his design.