Ho bisogno di un flusso di file di input che abbia un iteratore/adattatore bidirezionale.iteratore bidirezionale su file/ifstream
Sfortunatamente std::ifstream
(e simili) può essere utilizzato solo con std::istream_iterator
che è un tipo di iteratore di inoltro che non può tornare indietro. (o mi sbaglio qui?)
Potrei semplicemente caricare l'intero file in memoria e quindi utilizzare un iteratore di accesso casuale molto più potente sull'array; comunque vorrei evitarlo e leggere solo quanto ho veramente bisogno. Può succedere che abbia davvero bisogno solo di una piccola parte di un file.
In qualche modo potrei farlo manualmente utilizzando le funzioni C stdio.h
, ma sarà doloroso. Fondamentalmente ho bisogno di implementare un iteratore bidirezionale, con tutte le sue specifiche in mente, a mano.
Sto pensando di esaminare la libreria iostream di boost, ma il manuale è piuttosto travolgente, speravo che qualcuno potesse darmi una mano per raggiungere questo obiettivo particolare? O forse c'è un'altra libreria già esistente per fare esattamente quello di cui ho bisogno?
Ho bisogno dell'iteratore della libreria boost xpressive per analizzare i miei file, che si aspetta che l'iteratore possa essere incrementato o decrementato. Sarei a posto se il file che sto leggendo è bufferizzato, sebbene questo non sia un requisito.
Qualche idea? Grazie!
Sei sicuro di aver bisogno di un iteratore bidirezionale? Se un iteratore forward è sufficiente, [Boost.Spirit] (http://www.boost.org/libs/spirit/) hai coperto: [Librerie di supporto -> Multipass iterator] (http: //www.boost .org/libs/spirito/doc/html/spirito/supporto/multi_pass.html). – ildjarn
Non si può bufferizzare una parte del file, eseguire le operazioni su di esso, scriverlo in un file temporaneo, quindi ottenere la parte successiva del file, ecc ... ?? –
Lo prendo non si può semplicemente mappare la memoria del file? Meno portabile, ovviamente, ma ti dà accesso casuale * e * legge solo le parti del file che ti servono (beh, i quartieri di quelle parti arrotondati ad alcune dimensioni della pagina). –