将数据插入向量

时间:2013-07-07 13:50:51

标签: c++ file-io vector stl split

我的.txt文件包含以下格式的数据:

1.23,2.34,3.45
4.56,5.67,6.78

如何在矢量中插入数字

vector[1]={1.23,4.56,...}
vector[2]={2.34,5.67,...}
vector[3]={3.45,6.78,...}

代码

ifstream in("data.txt");
vector<vector<int> > v;

if (in) {
    string line;
    while (getline(in,line)) {
        v.push_back(std::vector<int>());
        stringstream split(line);
        int value;
        while (split >> value)
            v.back().push_back(value);
    }
}

1 个答案:

答案 0 :(得分:0)

代码中的多个问题

  1. 您的内心vector应为vector floatdouble而不是int

  2. 您的value变量也应为floatdouble

  3. 阅读时需要经过分隔符(逗号)。

  4. 您需要创建尽可能多的内部向量,因为每行中都有值。我通过使用布尔first变量完成了以下操作 - 我使用它来确保我只在读取第一行时创建向量。

  5. push_back to的内部向量的索引与被推回的行的值的列号相同。我使用变量col来确定当前在一行上读取的列号是什么。

  6. 您需要与列数一样多的内部向量。每个内部向量的成员数与文件中的行数一样多。

    ifstream in("data.txt");
    vector<vector<double> > v;
    
    bool first = false;
    if (in) 
    {
        string line;
        while (getline(in,line)) 
        {
            istringstream split(line);
            double value;
            int col = 0;
            char sep;
    
            while (split >> value)
            {
                if(!first)
                {
                    // Each new value read on line 1 should create a new inner vector
                    v.push_back(std::vector<double>());
                }
    
                v[col].push_back(value);
                ++col;
    
                // read past the separator                
                split>>sep;
            }
    
            // Finished reading line 1 and creating as many inner
            // vectors as required            
            first = true;
        }
    
    }