作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设输入文件包含以下内容,每个都对应结构中的四个成员:
0 2 54 34
1 2 43 56
4 5 32 67
因此,例如,在输入文件的第一行中,我希望将 0 存储为 departmentStationId,将 2 存储为 arrivalStationId,将 54 存储为 departureTime,将 34 存储为 arrivalTime。
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <list>
#include <vector>
#include <utility>
#include "graph.h"
using namespace std;
int main(int argc, char **argv)
{
ifstream file;
struct TrainsFile{
vector<int> departureStationId;
vector<int> arrivalStationId;
vector<int> departureTime;
vector<int> arrivalTime;
};
vector<TrainsFile> trains;//creating vector of structs here
file.open(argv[1]);
if (file.is_open())
{
//How does one use push_back() here given that I am dealing with vectors within vectors?
while(!file.eof())
{
file >> departureStationId >> arrivalStationId >> departureTime >>
arrivalTime;
}
}
}
最佳答案
根据您规定的目标和样本数据文件,我认为您的方向不对。您似乎想要文件中的列车列表,而不是列车文件列表。这使得 TrainsFile
中的 vector
消失并消除了您的问题。
通过快速重命名我们得到的结构
struct Train
{
int departureStationId;
int arrivalStationId;
int departureTime;
int arrivalTime;
};
如果我们将文件的读取从
while(!file.eof())
{
file >> departureStationId >> arrivalStationId >> departureTime >> arrivalTime;
}
到 operator>>
清洁度重载
std::istream &operator >>(std::istream & in, Train & train)
{
return in >> train.departureStationId
>> train.arrivalStationId
>> train.departureTime
>> train.arrivalTime;
}
然后我们可以重写the faulty while loop到
Train train;
while (file >> train)
{
trains.push_back(train);
}
这将循环直到无法从文件中读取火车。
完全组装的例子:
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
struct Train
{
int departureStationId;
int arrivalStationId;
int departureTime;
int arrivalTime;
};
std::istream &operator >>(std::istream & in, Train & train)
{
return in >> train.departureStationId
>> train.arrivalStationId
>> train.departureTime
>> train.arrivalTime;
}
int main(int argc, char **argv)
{
ifstream file;
vector<Train> trains; //creating vector of structs here
// strongly recommend testing argc to make sure there ID an argv[1] here
file.open(argv[1]);
if (file.is_open())
{
Train train;
while (file >> train)
{
trains.push_back(train);
}
}
}
由于每条线路似乎只有一列火车,对此的改进将是 to use std::getline
从文件中提取一行,然后 use a std::istringstream
从线路中提取火车。这将使您能够更好地检测格式错误的文件并从中恢复。参见 Read file line by line using ifstream in C++用于演示此方法。
关于c++ - 如何将文件中的数据存储到具有 vector 成员的结构 vector 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53547133/
我是一名优秀的程序员,十分优秀!