从文件加载"irregular"数据的最简单方法 C++

C++ simplest way of loading "irregular" data from file

本文关键字:最简单 方法 C++ irregular 文件 加载 数据      更新时间:2023-10-16

我有一个数据文件(表示邻接表),我想加载为std::vector< std::list<int> >

1 2 4
0 2
0 1
0

在c++/c++ 11中最干净的方法是什么?


这是一个蹩脚的尝试,它不工作的空白行…

vector< list<int> > data;
ifstream file("data.dat");
char foo;
while(file >> foo){
    file.unget();
    list<int> mylist;
    while( file.get() != 'n'){
        file.unget();
        int n;
        file >> n;
        mylist.push_back(n);
        cout << n;
    }
    data.push_back(mylist);
}
file.close();

逐行读取并解析成列表:

for (std::string line; std::getline(file, line);) {
    std::istringstream str(line);
    data.emplace_back(std::istream_iterator<int>(str), std::istream_iterator<int>{});
}

这里有一个想法:使用getline:

std::string line
std::getline(file, line);

然后你可以把它放入stringstream

std::stringstream s;
s.str(line);

然后将它们插入列表

std::list<int>& list = data[lineNumber];
int num = 0;
while (s >> num)
    list.emplace_back(num);