如何将数据逐行放入向量中

时间:2019-05-17 15:57:48

标签: c++

我想逐行读取文本文件(每行中没有太多整数)。我想对每一行进行排序,然后将它们放入向量的向量中。问题是我无法将它们逐行插入向量中。我不能让他们停在行尾。这就是我现在所拥有的。谁能帮我吗?

例如,我的文本文件如下:

1 5 3 7 29 17
2 6 9 3 10 
3 89 54 67 34

我想要这样的输出:

1: 1 3 5 7 17 29
2: 2 3 6 9 10
3: 3 34 54 67 89
vector<int> v;
vector<vector<int>> G_AL;

if(line!=0){ // Build matrics
    string lines;
    while (getline(fin, lines)) {
        istringstream os(lines);
        float temp;
        while(os >> temp ) {
            if(temp != '\n') {
                v.push_back(temp);
                sort(v.begin(), v.end());
                // get v
            }
            else
            {

            }
            G_AL.push_back(v);

        }
    }
}

1 个答案:

答案 0 :(得分:0)

尝试一下:

std::stringstream fin("2 1 3\n4 6 5\n10 9 7 8"); // Test data
std::vector<std::vector<int>> G_AL;
std::string lines;

while (getline(fin, lines)) {
    std::istringstream os(lines);
    std::vector<int> v;
    float temp;

    while(os >> temp)
        v.push_back(temp);

    sort(v.begin(), v.end());
    G_AL.push_back(v);
}

for (size_t i=0; i<G_AL.size(); ++i)
{
    std::cout << i+1 << ": ";
    for (auto const & v : G_AL[i])
        std::cout << v << " ";
    std::cout << std::endl;
}

您提供的代码中存在一些问题:

  • v向量在循环外部声明,因此,由于未清除v,因此值不断累加每一行。在循环内声明它可以解决问题,而不必清除它。
  • 仅当我们阅读完该行后,才能进行排序。
  • 您将v向量推到G_AL之后,而不是每行之后。
  • 您将float与字符(\ n)进行了比较,这是行不通的。实际上,如果没有要读取的浮点值,则行os >> temp的计算结果将为false,因此无需在流的末尾再次进行测试。