我有一个文本文件“test.txt”,它存储我的数据如下,每个分隔符字段之间有一个空格..
代码:姓名:Coy
045: Ted: Coy1
054: Red: Coy2
我如何从文件中读取这些数据并将其插入到 vector 中?
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)
}
但是推送数据好像有问题
最佳答案
正如其他人已经指出的那样,一个问题是您正在将数据读入局部变量(code
、name
和 coy
),但在将这些值添加到 vector 之前,切勿将这些值放入 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);
一旦您为该类型定义了一个流提取器,还有另一种可能性需要考虑;您可以从一对迭代器初始化 vector :
std::vector<Machine> machines((std::istream_iterator<Machine>(infile)),
std::istream_iterator<Machine>());
...这将从文件中读取所有数据(使用我们在上面定义的 operator>>
)并使用它来初始化 machines
vector 。
关于c++ - 我如何从文本文件中读取数据并将其推回 vector ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14545120/