读取矩阵中可变大小的列

时间:2013-10-01 19:26:40

标签: c++ fstream getline

我有一个文件,其中包含不同行中的不同列。例如

10 20 30 60 
60 20 90 100 40 80
20 50 60 30 90
....

我想读取每行中的最后三个数字。所以输出将是

20 30 60 
100 40 80
60 30 90

我不能使用以下结构,因为每行中的大小可变

结构1:

std::ifstream fin ("data.txt");
while (fin >> a >> b >> c) {...}

结构2:

string line;
stringstream ss;
getline(fin, line);
ss << line;
int x, y, z;
ss >> x >> y >> z >> line;

那我该怎么办?

1 个答案:

答案 0 :(得分:1)

将它们读入std::vector并删除除最后3项之外的所有内容。

std::string line;
while (getline(fin, line))
{
    std::vector<int> vLine;
    istringstream iss(line);
    std::copy(std::istream_iterator<int>(iss), std::istream_iterator<int>(), std::back_inserter(vLine));
    if (vLine.size() > 3)
    {
        vLine.erase(vLine.begin(), vLine.begin() + (vLine.size() - 3));
    }
    // store vLine somewhere useful
}