La implementación de iteradores puede ser extremadamente útil y lo he hecho con bastante frecuencia. Un iterador es un concepto simple que todo el mundo sabe cómo usar. Los iteradores te permiten usar los algoritmos STL.
A menudo, se puede implementar iteradores para simplificar el uso de las API del sistema operativo de uso frecuente como Windows' FindNextFile
Cuando se escribe un file_iterator (ya existe en alza), puede hacerlo de repente:
file_iterator itBegin; // initialize appropriately
file_iterator itEnd;
std::vector<HANDLE> vecFiles(itBegin, itEnd);
para obtener una lista de identificadores para todos los archivos coincidentes. Sin el iterador, las llamadas API necesarias habrían dificultado la lectura de su código.
Considere los iteradores como conceptos simples que le permiten escribir lo que realmente quiere decir y abstraer los detalles esenciales. Si tiene que implementar un algoritmo complejo que es difícil de entender por sí mismo, quiere reducir el desorden del código.
Si tiene una estructura bidimensional, p. std :: vector < std :: vector>, en otras palabras, una tabla, en la que se requiere que cada vector interno tenga la misma longitud, es posible que necesite iterar sobre cada n-ésimo elemento de los vectores internos. Si esto sucede con frecuencia suficiente, su código puede ser mucho más simple cuando implementa un iterador en lugar de propagar bucles forzados anidados en todo el código.
Por lo que dicen las respuestas, ¡uno pensaría que todos estaban febrilmente escribiendo iteradores! Hablando personalmente, creo haberlo hecho quizás dos veces en mi carrera en C++. –
Como se muestra en las respuestas, hay momentos en los que tiene sentido implementar un iterador personalizado, pero esos tiempos son raros. Si su clase de contenedor está construida sobre un contenedor STL, podría ser apropiado exponer los iteradores del contenedor subyacente en lugar de desplegar el suyo propio. –
Principalmente creo que las personas mencionan los iteradores que están disponibles en alguna biblioteca. Por ejemplo, consulte http://www.boost.org/doc/libs/1_42_0/libs/iterator/doc/index.html#specialized-adaptors. No necesita implementarlos usted mismo;) – UncleBens