Одной из причин работы с итераторами, конечно, является то, что он носит более общий характер и работает с диапазонами, которые не являются контейнерами или просто частью контейнера.
Другая причина заключается в том, что подписи будут перепутаны,Многие алгоритмы, такие как std :: sort, уже имеют более одной подписи:
sort(Begin, End);
sort(Begin, End, Compare);
Где второй используется для пользовательского сравнения при сортировке по стандартному меньше чем.
Если мы теперь добавим набор sort
для контейнеров, мы получим эти новые функции
sort(Container);
sort(Container, Compare);
Теперь у нас есть две сигнатуры sort(Begin, End)
и sort(Container, Compare)
, которые оба принимают два параметра шаблона, и компиляторбудут проблемы с разрешением звонка.
Если мы изменим имя одной из функций для решения этой проблемы (sort_range, sort_container?), Это больше не будет удобным.