Уменьшение конечного итератора
Сегодня я читал о том, что для контейнеров, поддерживающих двунаправленную итерацию, этот фрагмент кода является действительным:
Collection c(10, 10);
auto last = --c.end();
*last;
Это заставило меня задуматься: нужно ли при отправке пары двунаправленных итераторов [beg, end) алгоритму в STL определять --end? Если так, должен ли результат быть разыменованным?
т.е.
void algo(T beg, T end){
//...
auto iter = --end;
//...
*iter;
}