C ++从文件中读取标记数据

时间:2016-07-25 13:45:09

标签: c++

我有一个标记数据的文件,例如:

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
  表达式:向量迭代器不可解除引用

1 个答案:

答案 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或类似帮助者。