0

我有一个文本文件“test.txt”,它存储了我的数据如下,每个分隔符字段之间都有一个空格..

代号: 姓名: 腼腆

045: Ted: Coy1
054: Red: Coy2

我如何从文件中读取这些数据并将其插入向量中?

vector <Machine> data;
Machine machine

void testclass(){
ifstream inFile("test.txt");
if (!inFile){
    cout << "File couldn't be opened." << endl;
    return;
}
while(!inFile.eof()){
    string code,name,coy;
    getline(inFile,code, ':');
    getline(inFile,name, ':');
    getline(inFile,coy, ':');
data.push_back(machine)

}

但是推送数据好像有问题

4

2 回答 2

1

正如其他人已经指出的那样,一个问题是您正在将数据读入局部变量(codename) ,但在将这些值添加到向量之前coy从未将这些值放入。machine

但这不是唯一的问题。你while (!infile.eof())也是错的(事实上,while (!whatever.eof())本质上总是错的)。您通常想要做的是在阅读成功时继续阅读。只有在您尝试读取并且在读取开始之前whatever.eof()您已经到达文件末尾之后才会返回 true 。

我通常解决的方法是为您的 Machine 类定义一个流提取器:

class Machine { 
// ...

    friend std::istream &operator>>(std::istream &is, Machine &m) { 
        std::getline(is, m.code, ':');
        std::getline(is, m.name, ':');
        std::getline(is, m.coy, ":");
        return is;
    }
};

使用它,您可以进行如下阅读:

std::vector<Machine> machines;

Machine machine;

while (infile >> machine) 
    machines.push_back(machine);

一旦您为该类型定义了流提取器,还有另一种可能性需要考虑;您可以从一对迭代器初始化向量:

std::vector<Machine> machines((std::istream_iterator<Machine>(infile)),
                               std::istream_iterator<Machine>());

...这将从文件中读取所有数据(使用operator>>我们上面定义的)并使用它来初始化machines向量。

于 2013-01-27T07:33:21.187 回答
0

您应该读取数据并将它们放入 Machine 类对象的成员变量中。然后将该对象放在 Vector 上。

于 2013-01-27T07:04:01.320 回答