Por eso, cuando tenemos que atravesar un contenedor desde el principio hasta el final que escribir algo como¿Cómo se implementa end() en contenedores STL?
for (i = v->begin(); i != v->end(); i++)
asumiendo i
es un iterador para el envase v
.
Mi pregunta es "¿qué garantiza que el final siempre apuntará a uno pasado el último elemento en el contenedor?" ¿Cómo garantiza STL este comportamiento y existe la posibilidad de que este caso no sea cierto?
El STL no garantiza este comportamiento. El STL ** implementa ** este comportamiento en función de los requisitos definidos por el estándar. El estándar dice que así es como se supone que debe funcionar el desarrollador que implementa el STL y se supone que debe hacer que el STL funcione correctamente. –
Eso no es una buena práctica. Prefiera el operador de preincremento ++ i en lugar de i ++ cuando no está almacenando el valor. Para muchos tipos, es más rápido. –
@Jive Dadson: esa no es mi principal preocupación -> volver a calcular 'v-> end()' en cada vuelta del ciclo ciertamente es menos eficiente ... 'for (auto it = v.begin(), end = v .end(); it! = end; ++ it) 'es la forma canónica, aunque en C++ 0x uno también podría usar' for (auto val: v) 'o' std :: foreach' y un lambda función. –