質問

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

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

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

役に立ちましたか?

解決

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

他のヒント

あなたは、その状態で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)
    }
}

while 状態のストリームでは、 .eof()を使用しないでください。条件は、ファイルの終わりを超えて読み込もうとした 後にのみtrueと評価されます。より良い方法は

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

U の使用に欠陥があります。私はそれが何に使われるのか分かりません。 1回は型として使用されますが、もう1回は値として insert 関数に渡されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top