Necesito una secuencia de archivo de entrada que tendría un iterador/adaptador bidireccional.iterador bidireccional sobre archivo/ifstream
Desafortunadamente std::ifstream
(y similar) se puede usar solo con std::istream_iterator
que es un tipo de iterador directo que no puede retroceder. (¿O me equivoco aquí?)
Pude simplemente cargar todo el archivo en la memoria y luego usar un iterador de acceso aleatorio mucho más potente sobre la matriz; Sin embargo, me gustaría evitar eso y leer solo todo lo que realmente necesito. Puede suceder que realmente necesite solo una pequeña porción de un archivo.
que de alguna manera podría hacerlo de forma manual utilizando C stdio.h
funciones, pero que va a ser doloroso. Básicamente, necesitaría implementar un iterador bidireccional, con todas sus especificaciones en mente, a mano.
Estoy considerando buscar en la biblioteca de boost iostream, pero el manual es algo abrumador, ¿esperaba que alguien pudiera darme la mano para lograr este objetivo en particular? ¿O tal vez hay otra biblioteca ya existente para hacer exactamente lo que necesito?
necesito el iterador para la biblioteca impulso Xpressive para analizar mis archivos, que espera que el iterador puede ser incrementado, así como disminuye. Estaría bien si el archivo que estoy leyendo está almacenado en el búfer, aunque esto no es un requisito.
¿Alguna idea? ¡Gracias!
¿Estás seguro de que necesitas un iterador bidireccional? Si un iterador directo será suficiente, [Boost.Spirit] (http://www.boost.org/libs/spirit/) lo tiene cubierto: [Bibliotecas de apoyo -> El iterador de múltiples pasos] (http: //www.boost .org/libs/spirit/doc/html/spirit/support/multi_pass.html). – ildjarn
¿No puede almacenar una parte del archivo en el búfer, realizar operaciones en él, escribirlo en un archivo temporal, luego obtener la siguiente parte del archivo, etc.? –
Supongo que no se puede simplemente asignar un mapa de memoria al archivo? Menos portátil, por supuesto, pero te da acceso aleatorio * y * solo lee las partes del archivo que realmente necesitas (bueno, los vecindarios de esas partes se redondean a algún tamaño de página). –