Pergunta

Pergunta simples, espero que uma maneira fácil e só quero verificar Eu estou fazendo isso da maneira correta / eficiente.

Eu tenho um objeto de classe T, que normalmente é colocado em um vector que é criado na minha função main (). Pode ser qualquer tipo de dados, corda, int, float .. etc. Estou lendo de um arquivo ... que é introduzido a partir do usuário e passados ??para a função. Aqui é a minha leitura básica na função:

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)
   }
}

inserção é apenas uma outra função que irá percorrer e inserir os dados na minha estrutura de dados. Eu só quero ter certeza que essa é a melhor maneira de passar que os dados sobre se ele vai mesmo trabalhar.

Foi útil?

Solução

Parece que ele vai funcionar bem, e eu diria que este é provavelmente a melhor maneira de fazê-lo. Mas por que você está perguntando aqui em vez de apenas testando-lo sozinho?

Outras dicas

Você fez o velho erro de testar contra eof na condição. EOF não está definido até que você tentar ler além do fim do arquivo. Portanto, este método irá inserir um valor extra para o vetor que você não quer.

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)
    }
}

Não use .eof() em um córrego em uma while-condição. A condição será avaliada como verdadeira somente após uma tentativa de ler além do fim do arquivo foi feito. a melhor maneira é fazer

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

O uso do U é falho. Eu não tenho idéia o que é usado para. Uma vez que é usado como um tipo, mas, em seguida, outra vez que você passá-lo para a função insert como um valor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top