Уменьшение конечного итератора

Сегодня я читал о том, что для контейнеров, поддерживающих двунаправленную итерацию, этот фрагмент кода является действительным:

Collection c(10, 10);
auto last = --c.end();
*last;

Это заставило меня задуматься: нужно ли при отправке пары двунаправленных итераторов [beg, end) алгоритму в STL определять --end? Если так, должен ли результат быть разыменованным?

т.е.

void algo(T beg, T end){
    //...
    auto iter = --end;
    //...
    *iter;
} 

Ответы на вопрос(4)

Ваш ответ на вопрос