Domanda

Domanda semplice, si spera un modo semplice e voglio solo verificare che lo sto facendo nel modo corretto / efficiente.

Ho un oggetto di classe T, che in genere viene inserito in un vettore creato nella mia funzione main (). Può essere qualsiasi tipo di dati, stringa, int, float ... ecc. Sto leggendo da un file ... che viene immesso dall'utente e passato alla funzione. Ecco la mia funzione di lettura di base:

template <class T, class U>
void get_list(vector<T>& v, const char *inputFile, U)
{
ifstream myFile;
T object;

myFile.open("inputFile")
while(!myFile.eof())
   {
   myFile >> object;
   insert(v, object, U)
   }
}

insert è solo un'altra funzione che passerà e inserirà i dati nella mia struttura di dati. Voglio solo assicurarmi che questo sia il modo migliore per trasmettere quei dati se funzioneranno anche.

È stato utile?

Soluzione

Sembra che funzionerà bene, e direi che questo è probabilmente il modo migliore per farlo. Ma perché lo chiedi qui invece di provarlo tu stesso?

Altri suggerimenti

Hai fatto il vecchio errore di testare contro eof nella condizione. EOF non è impostato fino a quando non si tenta di leggere oltre la fine del file. Quindi questo metodo inserirà un valore extra nel vettore che non vuoi.

template <class T, class U>
void get_list(vector<T>& v, const char *inputFile, U)
{
    ifstream myFile("inputFile");  // Why hard code this?
                                   // When you pass inputFile as a parameter? 
    T object;


    while(myFile >> object)  // Get the object here.
                             // If it fails because of eof() or other
                             // It will not get inserted.
    {
         insert(v, object, U)
    }
}

Non usare .eof () su uno stream in una mentre -condition. La condizione verrà valutata vera solo dopo è stato effettuato un tentativo di leggere oltre la fine del file. un modo migliore è fare

while(myFile >> object)
    insert(v, object, U);

L'utilizzo di U è errato. Non ho idea di cosa venga utilizzato. Una volta viene usato come tipo, ma un'altra volta lo si passa alla funzione insert come valore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top