Здравствуйте, _hum_, Вы писали:
__>я об этом и сказал выше — что одной универсальной не получится
Имя может быть одно, например через перегрузку (UPD: хотя в этом случае тут семантика разная, это не просто оптимизация).
А вот реализация разная, потому что это контейнеры разных концепций. Точнее ты можешь сделать одну универсальную реализацию, но это будет неэффективно.
Точно также как и в случае с std::advance — универсальная реализация линейная, но есть более оптимальная для более узкой категории итераторов. Другой пример — std::partition