Gestione file nel c++


#1

nel linguaggio c++, quali sono i “comandi”(librerie etc…) che mi permettono di interagire con un file di testo (.txt)?, alcuni di queste possibilità sono più veloci di altre?, si possono ottimizare e se si come si otimizano?, grazie mille.
ps. mi scuso per eventuali miei errori di scrittura.


#2

Ciao,
Senza scendere troppo nel dettaglio, io personalmente uso fstream in c++, senza bisogno di ottimizzazioni varie, dato che a livello di territoriali/nazionali è più importante concentrarsi sul risolvere il problema più che sul risparmiare qualche millesimo di secondo (in realtà nelle nazionali non serve neanche prendere i dati da input, vedrai che ci sarà “solo” da implementare le funzioni).
L’uso è molto semplice

#include <fstream>

int main() {
   int a=0;

   std::ifstream ifs("input.txt");
   ifs >> a; //supponiamo che input.txt contenga un intero, ifs viene usato praticamente come usi std::cin
   ifs.close();

   std::ofstream ofs("output.txt");
   ofs << a*2; //usato come cout, per capirci
   ofs.close();

   return 0;

}

#3

grazie mille, un ultima domanda, cosa sucederebbe se non ci fosse il .close()?


#4

Scusa il ritardo nella risposta.
Ti rimando a stack overflow: https://stackoverflow.com/questions/28253569/what-happens-if-i-never-call-close-on-an-open-file-stream

Praticamente, quando viene chiamato il distruttore dell’oggetto viene chiamato anche close, generalmente, se non distruggi te l’oggetto, viene fatto in automatico dopo il return della funzione se la variabile è locale, o a fine esecuzione se la variabile è globale (accetto correzioni dato che non programmo spesso in c++).
Comunque ti consiglio di chiamarlo te per evitare errori inaspettati, dato che si formano diversi pasticci se non si sta attenti, ad esempio nel caso in cui un file venga aperto più volte o cose del genere (questo anche al di fuori delle Olimpiadi).
Diciamo che “Esplicito è meglio che implicito”, quindi finché puoi, specifica te cosa deve fare il tuo programma e quando deve farlo.


#5

Grazie mille, l’argomento mi interesava più per un approfondimento personale, ma ora che ho visto è utile anche in gara :sweat_smile: