将 fstream ">>" 作为函数参数传递

Passing fstream ">>" as function argument

本文关键字:gt 函数 参数传递 fstream      更新时间:2023-10-16

我正在编写一个程序,读取一个每行包含两个值的文件。这些值应存储在两个向量中,xVals 和 yVals。因此,我使用 push_back 函数,但我希望我的代码更漂亮。现在就像:

ifstream file;
file.open("foo.txt");
double TempVal;
while(file >> TempVal){
    xVals.push_back(TempVal);
    file >> TempVal;
    yVals.push_back(TempVal);
}

我目前正在寻找的是这样的解决方案(只是重要的一行):

while(file >> xVals.push_back(??) >> yVals.push_back(??))

问号代表"我不知道如何获取">>"传递的值......有没有一种简单(比上面的三行更容易)或更好的方法来实现这一目标?:-)

谢谢

你可以做这样的事情:

double tempX, tempY;
while( file >> tempX >> tempY )
{
    xVals.push_back(tempX);
    yVals.push_back(tempY);
}

如果你真的想要一些漂亮的东西,你可以定义一个执行流提取/插入的Point类,然后只使用一个算法:

std::vector<Point> points;
std::copy(
    std::istream_iterator< Point >( file ), std::istream_iterator< Point >()
  , std::back_inserter( points )
);

只是为了避免使用TempVal,您可以直接对向量实例进行操作:

while(file.good() && !file.eof())
{
    xVals.resize(xVals.size() + 1,0.0);
    yVals.resize(yVals.size() + 1,0.0);
    file >> xVals.back() >> yVals.back();
}