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