我有一个标记数据的文件,例如:
Label1,0.002546,0.054126,...
...
...
LabelN,0.025413,0.985412,...
我想要的是将标签存储到std::vector<std::string>
,将数据存储到std::vector<std::vector<double>>
所以,这就是我尝试过的:
input.open(files.at(0));
while (std::getline(input, line)) {
std::istringstream is(line);
// Get label
labels.push_back( *(++std::istream_iterator<string>(is)) );
// Get data
data.push_back(std::vector<double>( ++std::istream_iterator<double>(is), std::istream_iterator<double>()));
}
但是,这不起作用,我一直在
Debug Assertion失败!
程序:C:\ Windows \ SYSTEM32 \ MSVCP120D.dll
文件:c:\ program files(x86)\ microsoft visual studio 12.0 \ vc \ include \ vector
行:72
表达式:向量迭代器不可解除引用
答案 0 :(得分:1)
你的istream_iterator<string>
将消耗整条线;你需要以某种方式对,
进行标记,例如:
std::istringstream is(line);
data.push_back({});
std::string token;
std::getline(is, token, ',');
labels.push_back(token);
while (std::getline(is, token, ',')) {
double v;
std::istringstream(token) >> v;
data.back().push_back(v);
}
请注意,稍微神秘的双重解析可以替换为例如boost::lexical_cast
或类似帮助者。