Это стандартное обоснование дизайна для всей библиотеки: отделение контейнеров от алгоритмов.
Если бы вы сделали это по-своему, вам пришлось бы реализовать каждую функцию X для каждого контейнера Y, что приведет вас к реализации M * N, если у вас есть M функций и N контейнеров.
Используя итераторы и заставляя алгоритмы работать на итераторах, а не контейнерах, вам нужно только реализовать M алгоритмов плюс N интерфейсов итераторов.
Это разделение также означает, что вы имеете бесконечно более широкую область применения: алгоритмы могут использоваться не только для каждого контейнера библиотеки, но и для любого контейнера, настоящего или будущего, который любой решает написать и оснастить итераторами. Конечное и бесконечное повторное использование - довольно сильный аргумент! И вызов алгоритмов через общий бесплатный интерфейс не добавляет никаких затрат.