c ++如何使用istream struct包含vector

时间:2014-09-22 19:46:58

标签: c++

如何将包含整数向量的结构作为成员,我尝试了以下代码但是无法读取文件

struct Ss{
    std::vector<int> a;
    double b;
    double c;    };

std::istream& operator>>(std::istream &is, Ss &d)
{
    int x;
    while (is >> x)  
        d.a.push_back(x);
    is >> d.b;
    is >> d.c;
    return is;
}
std::vector <std::vector<Ss >> Aarr;

void scanData()
{
    ifstream in;
    in.open(FileInp);
    std::string line;


    while (std::getline(in, line))
    {
        std::stringstream V(line);
        Ss S1;
        std::vector<Ss > inner;
        while (V >> S1)
            inner.push_back(std::move(S1));
        Aarr.push_back(std::move(inner));

    }
}

我确实搜索过类似的问题,但我找不到。

1 个答案:

答案 0 :(得分:1)

这里的直接问题是终止while循环的相同条件会阻止连续读取工作。流处于错误状态。因此,您的double值永远不会被读取。

实际上,第一个double的整数部分被读作整数,在流中留下小数部分。你无法从中恢复过来。

解决此问题的一种方法可能是将您的值读入字符串,使用stoi将它们转换为整数并将它们放入向量中。但在进行整数转换之前,请检查字符串中的小数点。如果它包含一个,则跳出循环。使用stod转换双值。