0

簡単な質問です。できれば簡単な方法で、正しい/効率的な方法で行っていることを確認したいだけです。

私はクラス T オブジェクトを持っています。これは通常、main() 関数で作成されたベクトルに入れられます。任意の種類のデータ、文字列、int、float などを指定できます。ユーザーから入力され、関数に渡されるファイルから読み取っています。これが私の基本的な読み取り機能です。

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 は、データを通過してデータ構造に挿入する別の関数です。それが機能する場合でも、これがそのデータを渡すための最良の方法であることを確認したいだけです。

4

3 に答える 3

4

条件で eof に対してテストするという古い間違いを犯しました。EOF は、ファイルの終わりを超えて読み取ろうとするまで設定されません。したがって、このメソッドは、不要な値をベクターに 1 つ挿入します。

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)
    }
}
于 2008-11-12T00:11:10.883 に答える
1

うまくいくように見えますが、これがおそらく最善の方法だと思います。しかし、なぜ自分でテストするのではなく、ここで質問しているのですか?

于 2008-11-11T23:59:10.800 に答える
1

-condition.eof()のストリームでは使用しないでください。この条件は、ファイルの末尾を超えて読み取りを試行した後にwhileのみ true と評価されます。より良い方法はすることです

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

の使用にU欠陥があります。何に使われているのかわかりません。ある時は型として使用されますが、別の時insertは値として関数に渡します。

于 2008-11-12T00:09:23.353 に答える