gpt4 book ai didi

c++ - 如何将文件中的数据存储到具有 vector 成员的结构 vector 中

转载 作者:行者123 更新时间:2023-11-28 04:28:44 37 4
gpt4 key购买 nike

假设输入文件包含以下内容,每个都对应结构中的四个成员:
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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com