C ++最简单的加载方式"不规则"文件

时间:2015-07-15 21:06:42

标签: c++ c++11

我有一个数据文件(代表邻接列表),我想加载为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();

2 个答案:

答案 0 :(得分:3)

只需逐行阅读并将其解析为列表:

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

答案 1 :(得分:0)

这是一个想法:使用getline:

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

然后你可以将它放入字符串流

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

然后将它们插入列表

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