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。所以这个方法会在你不想要的向量中插入一个额外的值。

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

不要.eof()while-condition 的流上使用。只有在尝试读取文件末尾之后,该条件才会评估为真。更好的方法是

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

你的使用U是有缺陷的。我不知道它是用来做什么的。一次它被用作一种类型,但另一次你将它insert作为一个值传递给函数。

于 2008-11-12T00:09:23.353 回答