Disminuyendo un iterador final
Hoy estuve leyendo sobre cómo para los contenedores que admiten la iteración bidireccional, este código es válido:
Collection c(10, 10);
auto last = --c.end();
*last;
Eso me hizo pensar, ¿se requiere que al enviar un par de iteradores bidireccionales [beg, end) a un algoritmo en el STL que --end define? Si es así, ¿el resultado debe ser desreferible?
es decir
void algo(T beg, T end){
//...
auto iter = --end;
//...
*iter;
}